c++ - Qt:QScriptValueIterator 有一个额外的元素

标签 c++ json qt

我正在尝试使用 Qt 中的 QScriptValue 类读取 JSON 对象,我注意到在遍历数组时我总是在末尾得到一个额外的元素。

假设我有一个名为 value 的字符串,如下所示:

QString value = "{\"identifier\":\"testID\", \"params\":[{\"field\":\"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 的文档它说:

The next() advances the iterator. The name(), value() and flags() functions return the name, value and flags of the last item that was jumped over

所以我相应地改变了我的迭代:

while(it.hasNext())
{
    it.next();
    qDebug() << it.name() << " : " << it.value().toString();
    qDebug()<< "--------------";
}

但我得到了一些我没想到的东西:

"0"  :  "[object Object]"
--------------
"1"  :  "[object Object]"
--------------
"length"  :  "2"
--------------

谁能指出我在这里做错了什么?

谢谢。

最佳答案

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

关于c++ - Qt:QScriptValueIterator 有一个额外的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9167237/

相关文章:

c++ - 错误 : expected identifier before ‘public’ , 预期 ‘{’ 之前 ‘public’

c++ - future 选择哪一个,c++还是python2.x/3.x

c# - 使用 JavaScriptserializer 将 google places details JSON 转换为 C# 对象

python - 属性错误: 'str' object has no attribute 'keys' error in getting json object keys

qt - 替代 QLineEdit 以获得双倍

c++ - 我是否正确使用 new 运算符?

c++ - 使用 Cuda C 将大型二维数组导出到文件的更快方法

javascript - IE9 资源返回 char 数组而不是 JSON 对象

c++ - QObjects 移入 QThreads 后信号不再工作

c++ - QUdpSocket : No such file or directory