我想在 symbian 应用程序中解析此 JSON 输出:
[
{"ID":"9","titel":"wouter","plaatsID":"2616","prio":"3"},
{"ID":"8","titel":"pasta","plaatsID":"3780","prio":"3"},
{"ID":"6","titel":"Muts prikken","plaatsID":"3780","prio":"2"
{"ID":"5","titel":"doorplannen","plaatsID":"3840","prio":"2"}
{"ID":"4","titel":"Gasfles","plaatsID":"3780","prio":"2"}
]
为此,我编写了以下代码,但无法读取数据。其他单个 JSON 输出工作正常,但多个输出不起作用:
void start::finishedSlot(QNetworkReply * reply)
{
// Reading attributes of the reply
// e.g. the HTTP status code
reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
// see CS001432 on how to handle this
// no error received?
if (reply->error() == QNetworkReply::NoError)
{
QByteArray data = reply->readAll();
bool ok;
QVariantMap result = Json::parse(QString(data), ok).toMap();
if(!ok) {
qFatal("An error occurred during parsing");
exit(1);
}
QMapIterator<QString, int> i(result);
while (i.hasNext()) {
i.next();
cout << i.key() << ": " << i.value() << endl;
}
ui->log->setText("het gaat goed");
}
// Some http error received
else
{
ui->log->setText("gaat NIET goed");
}
delete reply;
}
最佳答案
在Qt 5中,它支持JSON数据。
“Qt 提供了对处理 JSON 数据的支持。JSON 是一种对源自 Javascript 的对象数据进行编码的格式,但现在广泛用作互联网上的数据交换格式。 Qt 中的 JSON 支持提供了一个易于使用的 C++ API 来解析、修改和保存 JSON 数据。它还支持以二进制格式保存此数据,该格式可直接映射并且访问速度非常快。 有关 JSON 数据格式的更多详细信息,请参阅 RFC-4627。”
http://qt-project.org/doc/qt-5/json.html
而且我认为如果需要的话将它们移植到 Qt 4 并不困难。
至少你可以在 https://github.com/qtproject/qtbase/tree/5.3/src/corelib/json 找到代码
有人将 QJson* 从 5 移植到 4:(2013-07-02 添加) https://github.com/5in4/qjson-backport
注:2012-11-30
其他人也指出可以使用 QtScript 来解析 JSON 数据。如果你看得懂中文(如果看不懂,请谷歌翻译):http://www.cuteqt.com/blog/?p=2261 (这个网站暂时挂了,忘了通过Google Reader备份,GR也死了...2013-07-02)
关于Qt 中使用 QVariantMap 的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5117384/