一、解析时未使用严格模式,抛出异常
通常各种博文里给的示例都是这种:
std::string strJson="{\"123\":123}";
Json::Reader Reader;
Json::Value Value;
if(false == Reader.parse(strJson,Value))
{
return false;
}
.....
一般情况下解析不会出错,但是部分非json格式数据,如“{“123”:123}}}”,在这种写法下,不会返回错误,能继续运行,在后续使用Value时会抛空指针异常。应该改为以下方式:
std::string strJson="{\"123\":123}";
Json::Reader Reader(Json::Features::strictMode());
Json::Value Value;
if(false == Reader.parse(strJson,Value))
{
return false;
}
.....
2、数组中加入对象抛异常
在添加json数据时,需要注意当 Json::Value 属性为数组时,即调用 isArray() 函数成功,此时添加整形、浮点型、bool、string类型数据会抛异常,需要提前进行判断:
std::string strValue,strJson ;
....
if(WVaule.isArray() == false)//数组中加入对象会抛异常
{
WVaule[strName] = strValue;
}
else
return false;
Json::FastWriter fast_writer;
strJson = fast_writer.write(WVaule);
.....