【问题标题】:Parse jsonarray?解析jsonarray?
【发布时间】:2014-06-04 03:50:12
【问题描述】:

我有如下 JSON:

{
    "agentsArray": [{
        "ID": 570,
        "picture": "03803.png",
        "name": "Bob"
    }, {
        "ID": 571,
        "picture": "02103.png",
        "name": "Tina"
    }]
}

现在我正在尝试遍历每个数组元素。使用qt-jsonhttps://github.com/da4c30ff/qt-json

试过了:

            foreach(QVariantMap plugin, result["agentsArray"].toList()) {
                qDebug() << "  -" << plugin["ID"].toString();
            }

但无法让它工作,有什么想法我做错了吗?

【问题讨论】:

  • 您使用的是 Qt 4 还是 5? Qt 5 在 QtCore 中有 json 解析器类。
  • 那太棒了! :)

标签: c++ json qt qt5 qtcore


【解决方案1】:

我建议在 Qt 5 中使用来自 QtCore 的 QJson* 类。由于机器可读的二进制存储针对读写进行了优化,因此它们非常高效,并且由于它们具有良好的 API,使用它们也非常方便.

这个代码库对我来说很好用,但是请注意我现在忽略了所有的错误检查,这对生产代码来说不是一个好的建议。这只是一个原型代码,分别。

main.json

{
    "agentsArray": [{
        "ID": 570,
        "picture": "03803.png",
        "name": "Bob"
    }, {
        "ID": 571,
        "picture": "02103.png",
        "name": "Tina"
    }]
}

main.cpp

#include <QFile>
#include <QByteArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>

int main()
{
    QFile file("main.json");
    file.open(QIODevice::ReadOnly | QIODevice::Text);
    QByteArray jsonData = file.readAll();
    file.close();

    QJsonDocument document = QJsonDocument::fromJson(jsonData);
    QJsonObject object = document.object();

    QJsonValue value = object.value("agentsArray");
    QJsonArray array = value.toArray();
    foreach (const QJsonValue & v, array)
        qDebug() << v.toObject().value("ID").toInt();

    return 0;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

构建并运行

qmake && make && ./main

输出

570 
571 

【讨论】:

    【解决方案2】:

    output 是 QByteArray 类型

    QJsonDocument doc(QJsonDocument::fromJson(output));
    
    foreach (const QJsonValue & v, doc.array()){
      Person person;
      person.fromJson(v.toObject());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 2017-08-13
      • 2016-08-17
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多