【发布时间】:2016-04-09 21:24:11
【问题描述】:
根据this,以括号开头的JSON是有效的,所以我在test.json文件中编码了一个项目列表:
[{"name": "a"},{"name": "b"}]
深受这个answer的启发,我把这个代码推送到main.cpp:
#include <QApplication>
#include <QFile>
#include <QByteArray>
#include <QJsonObject>
#include <QJsonDocument>
#include <QVariant>
#include <QDebug>
#include <iostream>
int main(int argc, char *argv[]) {
// Reading the JSON, parse it, get data as QJsonObject
QString val;
QFile file;
file.setFileName("test.json");
file.open(QIODevice::ReadOnly | QIODevice::Text);
val = file.readAll();
file.close();
QJsonDocument d = QJsonDocument::fromJson(val.toUtf8());
QJsonObject sett2 = d.object();
// Printings
qWarning() << "File content: " << val;
qWarning() << "sett2: " << sett2 << " (empty: " << sett2.empty() << ')';
// try to access the data directly
QJsonValue value = sett2.value(QString("name"));
qWarning() << "name value: " << value;
QJsonObject item = value.toObject();
qWarning() << "QJsonObject of accessed value: " << item;
}
这是输出:
File content: "[{\"name\": \"a\"},{\"name\": \"b\"}]\n"
sett2: QJsonObject() (empty: true )
name value: QJsonValue(undefined)
QJsonObject of accessed value: QJsonObject()
我们看到文件被正确读取。但是,似乎没有数据被访问:sett2 是空的,好像没有数据一样。
在搜索QJsonObject 文档后,我找不到任何可以访问文件中数据的例程,在这种情况下:似乎唯一允许访问字段的是value() , 方法,但它需要一个参数。
用0、1、NULL"name"、"a"、"b" 和"knock knock" 调用它会导致编译错误或空数据。
其他方法,如keys(),也返回空数据。
如何访问对象的数据? (这里是name: "a" 和name: "b")
【问题讨论】: