2012-02-06 2 views
1

Я пытаюсь читать объекты 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" 
-------------- 

Может ли кто-нибудь указать, что я делаю неправильно здесь?

Спасибо.

ответ

Смежные вопросы