Qt:QScriptValueIterator有一个额外的元素

时间:2012-02-06 21:03:54

标签: c++ json qt

我正在尝试使用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"
--------------

有谁可以指出我在这里做错了什么?

感谢。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我在it.next()之后添加了这一行。线: if(it.flags()&amp; QScriptValue :: SkipInEnumeration)继续; 你可以在这里找到更多关于它的信息: http://developer.qt.nokia.com/doc/qt-4.8/qscriptvalueiterator.html#details