解析Json数组?

17

我有一个像以下这样的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();
            }

但是无法使其工作,有什么想法我做错了吗?


1
你正在使用Qt 4还是5?Qt 5在QtCore中有JSON解析器类。 - László Papp
那将会很棒! :) - user3490755
2个回答

30

我建议在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 

0

output 是 QByteArray 类型

QJsonDocument doc(QJsonDocument::fromJson(output));

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接