gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:29:44 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com