JSON を C++ クラスに逆シリアル化するために、RapidJSON を使用する Cereal を使用しています。予想どおり、c++ std::string は null 値を持つことはできません。しかし、他のプラットフォームは文字列 (.NET SQL など) に対して null をサポートしており、文字列に対して null 値を持つ JSON を取得します。これを許容する必要があり、null の空の文字列を作成するだけです。それを行う最善の方法は何ですか?
次のように null を "" に変更する 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 internal assertion failure: IsString()"