Для десериализации JSON в класс C ++ я использую Cereal, который использует RapidJSON. Как и ожидалось, c ++ std :: string не может иметь нулевое значение. Но другие платформы поддерживают null для строк (.NET SQL и т. Д.), И я получаю от них JSON с нулевыми значениями для строк. Мне нужно смириться с этим и просто создать пустую строку для нулей. Как лучше всего это сделать?
Я по умолчанию использую замену строки в JSON, меняя нули на "", как показано ниже, но это не чистое решение.
#include <cereal/archives/json.hpp>
#include <boost/algorithm/string.hpp>
// i.e. substitue all ":null with ":"" Like {"key":null} into {"key":""}
boost::replace_all(json, "\":null", "\":\"\"");
auto r = std::make_shared<R>();
std::stringstream ss(json);
{
cereal::JSONInputArchive archive(ss);
r->serialize(archive);
}
Если кто-то ищет этот ответ на основе исключения, сгенерированного Cereal, это: «Внутренний сбой утверждения rapidjson: IsString ()»