I have received a JSON string as follow:
{
"ret":"xxx",
"error": [
{
"errors": {"0":"0.2", "1":"0.3" }
},
{
"errors": {"2":"0.2", "3":"0.4" }
}
]
}
I have written code to get all other values but I cannot figure out how to get the errors
field. I have noticed that errors
field is a key-value hash-like object. But the question is that all the keys in this hash-like object is changing.
I have found this question. It is using the MemberIterator
, however when I use this function, there is always a error.
Some of my code is here:
ret = "{\"ret\":\"101\",\"error\":[{\"errortype\":\"A0001\",\"errorstroke\":{\"0\":\"0.2\",\"1\":\"0.3\"}},{\"errortype\":\"A0021\",\"errorstroke\":{\"0\":\"0.2\",\"1\":\"0.3\"}}]}" ;
rapidjson::Document doc;
doc.Parse <kParseDefaultFlags>( ret.c_str ());
if(doc .HasMember( "ret")){
string retjson = doc["ret" ].GetString();
for ( unsigned i = 0; i < retjson. length(); ++i)
{
CCLog("%c\t" ,retjson. at(i ));
}
}
if ( doc.HasMember ("error"))
{
const Value & errorjson = doc["error" ];
for ( SizeType i = 0 ; i < errorjson .Size(); ++i )
{
if(errorjson [i]. HasMember("errortype" )){
string errortype = errorjson[i ]["errortype"]. GetString();
}
if(errorjson [i]. HasMember("errorstroke" )){
for ( Value::ConstValueIterator iter = errorjson[i ]["errorstroke"]. onBegin; iter != errorjson[i ]["errorstroke"]. onEnd(); ++iter)
{
for ( Value::MemberIterator m = iter->MemberBegin (); m != iter->MemberEnd (); ++ m)
{
}
}
}
}
}
The error occurs in Value::MemberIterator
. How can I solve it or is there some problem in JSON structure design?