JSON을 C++ 클래스로 비 직렬화하려면 RapidJSON을 사용하는 Cereal을 사용하고 있습니다. 예상대로 C++ std :: string에는 null 값을 사용할 수 없습니다. 그러나 다른 플랫폼은 문자열 (.NET SQL 등)에 대해 null을 지원하고 JSON을 문자열에서 null 값으로 가져옵니다. 나는 이것을 용인하고 null을위한 빈 문자열을 만들 필요가있다. 그렇게하는 가장 좋은 방법은 무엇입니까?시리얼에 rapidjson이있는 문자열에 null 값을 허용하고 ""로 변경하십시오.
기본적으로 다음과 같이 JSON에서 널 (null)을 "null"로 바꾸는 대신 문자열 대체를 사용하지만 "깨끗한 해결책은 아닙니다.
누군가 시리얼 의해 발생 된 예외에 따라이 대답을 보이는 경우#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);
}
그것은 인 "rapidjson 내부 어서 장애 : IsString()"곡류 1.1.2 \는 \ 포함 시리얼 \에서