我有一个类似以下的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();
}
但无法让它发挥作用,任何想法我做错了什么?
答案 0 :(得分:19)
我建议在Qt 5中使用QtCore的QJson *类。由于机器可读的二进制存储优化用于读写,因此它们非常高效。由于它们具有良好的API,因此使用它们也非常方便
这个代码库对我来说很好,但请注意我现在忽略了所有的错误检查,这对于生产代码来说不是一个好建议。这只是一个原型代码。
{
"agentsArray": [{
"ID": 570,
"picture": "03803.png",
"name": "Bob"
}, {
"ID": 571,
"picture": "02103.png",
"name": "Tina"
}]
}
#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;
}
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
qmake && make && ./main
570
571
答案 1 :(得分:0)
output
是QByteArray类型
QJsonDocument doc(QJsonDocument::fromJson(output));
foreach (const QJsonValue & v, doc.array()){
Person person;
person.fromJson(v.toObject());
}