如何在Qt中解析多维JSON数组?

时间:2015-08-28 15:57:17

标签: arrays json qt multidimensional-array

假设我有一个x-y坐标的JSON文件,如下所示:

{
"coordinates": [[  [1,2], [3,4], [5,6]  ]]
}

然后我将如何使用内置的JSON解析支持在Qt5中解析它? 我想知道如何在这样的坐标数组中访问这些值?

让我分享我在这方面的努力,看看我在解析JSON数据方面取得了哪些成功。

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

//    sample.json:
//    {
//        "agentsArray": [{
//            "name": "X",
//            "coordinates": [[  [2,2] ]]
//        }, {
//            "name": "Y",
//            "coordinates": [[  [6,6] ]]
//        }]
//    }


    QFile jsonFile("main.json");
    jsonFile.open(QIODevice::ReadOnly | QIODevice::Text);
    QByteArray jsonFileData = jsonFile.readAll();
    jsonFile.close();

    QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonFileData);
    QJsonObject jsonObject = jsonDocument.object();

    QJsonValue agentsArrayValue = jsonObject.value("agentsArray");
    QJsonArray agentsArray = agentsArrayValue.toArray();

    foreach (const QJsonValue & v, agentsArray)
    {
        qDebug() << v.toObject().value("name").toString();

        /* As i want to get the coordinates value but
         * i dont know what to do with this?
         */
        // qDebug() << v.toObject().value("coordinates").toArray(); // ?

        qDebug() << "--------------------";
    }

输出是:

"X"
--------------------
"Y"
--------------------

1 个答案:

答案 0 :(得分:2)

这就是我设法解析Qt5中的JSON多维数组的方式,希望它也可以帮到你;

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

//    sample.json:
//    {
//        "agentsArray": [{
//            "name": "X",
//            "coordinates": [[  [2,3] ]]
//        }, {
//            "name": "Y",
//            "coordinates": [[  [6,7] ]]
//        }]
//    }


    QFile jsonFile("main.json");
    jsonFile.open(QIODevice::ReadOnly | QIODevice::Text);
    QByteArray jsonFileData = jsonFile.readAll();
    jsonFile.close();

    QJsonDocument jsonDocument = QJsonDocument::fromJson(jsonFileData);
    QJsonObject jsonObject = jsonDocument.object();

    QJsonValue agentsArrayValue = jsonObject.value("agentsArray");
    QJsonArray agentsArray = agentsArrayValue.toArray();

    foreach (const QJsonValue & v, agentsArray)
    {
        qDebug() << v.toObject().value("name").toString();

        qDebug() <<"Lat: " << v.toObject().value("coordinates").toArray().at(0).toArray().at(0).toArray().at(0).toInt();
        qDebug() <<"Lon: " << v.toObject().value("coordinates").toArray().at(0).toArray().at(0).toArray().at(1).toInt();

        qDebug() << "--------------------";
    }

输出是:

"X"
Lat:  2
Lon:  3
--------------------
"Y"
Lat:  6
Lon:  7
--------------------