Qt 中使用 QVariantMap 的 JSON

标签 json qt symbian qjson

我想在 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/

相关文章:

.net - 如何将哈希表发送到 asmx web 服务?

javascript - 如何在Jquery中解析Json对象

c++ - qt:如何向POS打印机发送控制命令?

c++ - Symbian 中的 strcpy?

java - 如何从具有多个节点的json中提取特定数据?

javascript - 从 C# 返回 Json 字符串并使用 javascript 和 jquery 将其显示在文本框中

android - Qt/QML SwipeDelegate 在移动设备(Android、iOS)上无法正常工作

Android 后台服务控制 UI Activity

c++ - 如何在 Symbian C++ 中从 HTTP 下载文件?

java-me - 在 J2ME 平台中解析这个 XML 需要一些帮助