Как мы можем проанализировать данные, которые имеют null
в json.
В приведенном ниже примере первый Json (json1
) не имеет нулевого значения, так как его значения получают желаемый результат. Но во втором вызове здесь значение имеет значение NULL, следовательно, приведет к сбою приложения.
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
#include <string>
using namespace rapidjson;
bool ParseStarName( std::string json, std::string& strStarName)
{
Document d;
d.Parse(json.c_str());
if( d.IsObject() )
{
auto itStars = d.FindMember("stars");
if( itStars != d.MemberEnd() )
{
auto &star = itStars->value;
auto itName = star.FindMember("name");
if( itName != d.MemberEnd() )
{
strStarName = itName->value.GetString();
return true;
}
}
}
return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
const char* json1 = "{\"stars\":{ \"name\": \"1\" }}";
const char* json2 = "{\"stars\":null}";
std::string strStarName;
//No error
ParseStarName( json1, strStarName);
//Error
ParseStarName( json2, strStarName);
return 0;
}
Есть ли лучший вызов или лучший способ справиться с этой проблемой. В реальном случае мы получаем такие jsons с нулевым значением из стороннего API.