web-dev-qa-db-ja.com

jsonarrayを解析しますか?

私は次のようなJSONを持っています:

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

今、私は各配列要素をループしようとしています。 qt-jsonライブラリの使用 https://github.com/da4c30ff/qt-json

試した:

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

しかし、それを機能させることはできません、私が間違っていることについて何か考えはありますか?

12
user3490755

Qt5でQtCoreのQJson *クラスを使用することをお勧めします。これらは読み取りと書き込み用に最適化された機械可読バイナリストレージにより非常に効率的であり、NiceAPIがあるため非常に便利です。

このコードベースは私にとっては問題なく機能しますが、今のところすべてのエラーチェックを無視していることに注意してください。これは製品コードの良いアドバイスではありません。これはそれぞれ単なるプロトタイプコードです。

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 
20
lpapp