Я пытаюсь читать объекты JSON, используя класс QScriptValue в Qt, и я заметил, что при повторении по массиву я всегда получаю дополнительный элемент в конце.Qt: QScriptValueIterator имеет дополнительный элемент
Скажем, у меня есть строка с именем значения, как это:
значение QString = "{\" идентификатор \ ": \" TestID \ " \ "PARAMS \": [\ {" поле \ ": \" filed1: \ ", \" datatype \ ": \" integer \ ", \" fieldend \ ": \" \ "}, {\" field \ ": \" field2: \ ", \ "datatype \": \ "integer \", \ "fieldend \": \ "\"}]} ";
Мой код для итерации выглядит следующим образом:
QScriptValue sc;
QScriptEngine engine;
sc = engine.evaluate("("+value+")");
if(sc.isValid())
{
if(sc.property("params").isArray())
{
QScriptValueIterator it(sc.property("params"));
while(it.hasNext())
{
it.next();
qDebug()<< "field:" << it.value().property("field").toString();
qDebug()<< "datatype:" << it.value().property("datatype").toString();
qDebug()<< "fieldend:" << it.value().property("fieldend").toString();
qDebug()<< "--------------";
}
}
}
Выходные результаты с дополнительным элементом, который имеет пустые значения:
field: "field1:"
datatype: "integer"
fieldend: " "
--------------
field: "field2: "
datatype: "integer"
fieldend: " "
--------------
field: ""
datatype: ""
fieldend: ""
--------------
Я читал документацию QScriptValueIterator и говорит:
Следующий () продвигает итератор. Имя(), функции() значение и флаги() возвращает имя, значение и флаги последнего пункта, который был перепрыгнули
Так что я изменил мою итерацию соответственно:
while(it.hasNext())
{
it.next();
qDebug() << it.name() << " : " << it.value().toString();
qDebug()<< "--------------";
}
Но я получаю то, чего я не ожидал:
"0" : "[object Object]"
--------------
"1" : "[object Object]"
--------------
"length" : "2"
--------------
Может ли кто-нибудь указать, что я делаю неправильно здесь?
Спасибо.