@865497878 写道:
HelloWorld::findAllCallBack called with data:
{"name":"findAllCallBack","args":[
{"ResultCode":0,"Record":[
{"cdate":"2017-01-15 20:00:54","content":"Node.js insert."},
{"cdate":"2017-01-15 20:03:53","content":"Node.js insert."},
]}]}
通过下面代码解析,Record发生错误,ResultCode反而没错,从注释(判断是否有Record)开始错误
ValueMap JsonParser::decode(string content)
{
rapidjson::Document document;
document.Parse<0>(content.c_str());
ValueMap dict;
//解析错误
CCASSERT(!document.HasParseError(), "Parsing to document failure.");CCLOG("Parsing to document succeeded."); CC_ASSERT(document.IsObject() && document.HasMember("args")); const rapidjson::Value &args= document["args"]; //读取ResultCode CC_ASSERT(args.IsArray()); if ( args.Size() == 0) { return dict; } unsigned int i = 0; //获得一条记录对象 const rapidjson::Value &arg = args[i]; CC_ASSERT(arg.IsObject() && arg.HasMember("ResultCode")); const rapidjson::Value &val_ResultCode= arg["ResultCode"]; //读取ResultCode //判断ResultCode类型 CC_ASSERT(val_ResultCode.IsInt()); int resultCode = val_ResultCode.GetInt(); dict["ResultCode"] = Value(resultCode); //判断是否有Record if (arg.IsObject() && arg.HasMember("Record")) { const rapidjson::Value &records= arg["Record"]; //读取中文的数组 //判断是不是数组 CC_ASSERT(records.IsArray()); ValueVector listData; for(unsigned int i = 0; i < records.Size();i++) //如果不是数组,这一行会报错 { ValueMap row; //获得一条记录对象 const rapidjson::Value &record = records[i]; //判断这个record有没有CDate键 CC_ASSERT(record.HasMember("cdate")); const rapidjson::Value &val_CDate = record["cdate"]; //判断CDate类型 CC_ASSERT(val_CDate.IsString()); const char* cDate = val_CDate.GetString(); row["cdate"] = Value(cDate); //判断这个record有没有Content键 CC_ASSERT(record.HasMember("content")); const rapidjson::Value &val_Content = record["content"]; //判断Content类型 CC_ASSERT(val_Content.IsString()); const char* cContent = val_Content.GetString(); row["content"] = Value(cContent); listData.push_back(Value(row)); } dict["Record"] = Value(listData); } return dict;
}
帖子: 2
参与者: 1