Я получил строку JSON следующим образом:Как получить данные с ключом в файле JSON с помощью quickjson C++?
{
"ret":"xxx",
"error": [
{
"errors": {"0":"0.2", "1":"0.3" }
},
{
"errors": {"2":"0.2", "3":"0.4" }
}
]
}
Я написал код, чтобы получить все другие значения, но я не могу понять, как получить errors
поле. Я заметил, что поле errors
- это хэш-подобный объект с ключом. Но вопрос в том, что все ключи в этом хэш-подобном объекте меняются.
Я нашел это question. Он использует MemberIterator
, однако, когда я использую эту функцию, всегда возникает ошибка.
Некоторые из моего кода здесь:
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)
{
}
}
}
}
}
Ошибка возникает в Value::MemberIterator
. Как я могу ее решить или есть какая-то проблема в дизайне структуры JSON?
Можете ли вы опубликовать журнал ошибок? – bholagabbar
@ShreyansSheth Проблема в том, что я не могу получить значение ключа объекта JSON. – einverne