使用Qt5解析以括号`[`开头的JSON

Posted

技术标签:

【中文标题】使用Qt5解析以括号`[`开头的JSON【英文标题】:Parsing JSON starting with bracket `[` with Qt5 【发布时间】: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() , 方法,但它需要一个参数。 用01NULL"name""a""b""knock knock" 调用它会导致编译错误或空数据。 其他方法,如keys(),也返回空数据。

如何访问对象的数据? (这里是name: "a"name: "b"

【问题讨论】:

【参考方案1】:

答案很简单——你必须打电话给QJsonDocument::array()而不是object

QJsonArray sett2 = d.array();

【讨论】:

以上是关于使用Qt5解析以括号`[`开头的JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Swift 3.1 中的 API 创建解析数据,API 以括号开头和结尾

QT开发(六十二)———QT5解析Json文件

Qt--解析Json

json数据解析 开头有个小括号.怎么办

get_json_object() - 在 Impala 中解析 json 字符串 - 无法解析以数字开头的键

解析:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项