我正在尝试使用Qt中的QScriptValue类读取JSON对象,我注意到在迭代数组时,我总是在结尾处获得额外的元素。
假设我有一个名为value的字符串,如下所示:
QString value =“{\”identifier \“:\”testID \“, \ “PARAMS \”:[{\ “字段\”:\ “filed1:\”, \“datatype \”:\“integer \”,\“fieldend \”:\“\”},{\“field \”:\“field2: \“,\”数据类型\“:\”整数\“,\”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的文档,并说:
next()推进迭代器。 name(),value()和flags()函数返回最后一项的名称,值和标志 跳过
所以我相应地改变了我的迭代:
while(it.hasNext())
{
it.next();
qDebug() << it.name() << " : " << it.value().toString();
qDebug()<< "--------------";
}
但是我得到了一些我没想到的东西:
"0" : "[object Object]"
--------------
"1" : "[object Object]"
--------------
"length" : "2"
--------------
有谁可以指出我在这里做错了什么?
感谢。
答案 0 :(得分:2)
我遇到了同样的问题,我在it.next()之后添加了这一行。线: if(it.flags()&amp; QScriptValue :: SkipInEnumeration)继续; 你可以在这里找到更多关于它的信息: http://developer.qt.nokia.com/doc/qt-4.8/qscriptvalueiterator.html#details