解析JSON以括号`[`with Qt5

时间:2016-04-09 21:24:11

标签: c++ json qt parsing qt5

根据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文档上搜索后,我找不到任何可以访问文件中数据的例程,在这种情况下:唯一一个似乎允许访问字段的例程是{ {1}}方法,但它需要一个参数。 使用value()01 NULL"name""a""b"进行调用会导致编译错误或空数据。 其他方法(如"knock knock")也返回空数据。

如何访问对象的数据? (此处为keys()name: "a"

1 个答案:

答案 0 :(得分:4)

答案很简单 - 你必须拨打QJsonDocument::array()而不是object

QJsonArray sett2 = d.array();