假设我有一个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"
--------------------
答案 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
--------------------