龙空技术网

Qt解析JSON

QT教程 344

前言:

而今你们对“jqueryeach解析json”可能比较看重,朋友们都想要分析一些“jqueryeach解析json”的相关文章。那么小编也在网上搜集了一些对于“jqueryeach解析json””的相关文章,希望兄弟们能喜欢,大家一起来了解一下吧!

QT 解析json的三件套,QJsonDocument、QJsonObject、QJsonArray、QJsonValue#

要搞清楚这几个东西,首先得搞清楚JSON得结构。

JSON主要是有几种格式:

JSON主要格式#Object(对象)

图片中即为JSON中对象的格式,他由一对花括号({})作为包围,对象可以包含很多键值对(Key-Value),每个键(Key)用引号(“”)括起来,键和值之间用冒号分隔(:),值(Value)可以是bool、数字、字符串、对象、数组或者null。键值对之间用逗号(,)分开。

{  "type":1,  "msg":"Hello World!",  "nullable":true,  "member":["ZhangSan", "Lisi", "WangWu"],  "info":{          "name":"Zhangsan",          "id":"1"         }}

这里就是一个键值对组成得对象。

2.Array(数组)

如图所示,数组是由一系列值(Value)得有序集合,值与值之间用逗号分开(,)

[  "a", 1, true, null,  {     "name":"1",     "key":"123"  },  [1,2,3]]
如上所示,这里就是一个JSON数组。QT的JSON处理类#

从上面JSON的分析,就可以大概知道怎么在QT去解析一个JSON字符串了。

QJsonObject

这里就是JSON的对象,由键值对组成,也就是QString和QJsonValue组成

QJsonArray

这里是JSON的数组,由一系列的JSON的值(QJsonValue)组成

QJsonValue

JSON的值。可以是bool、数字、字符串、数组、对象

QJsonDocument

JSON文档。

【粉丝福利】Qt开发学习资料包、大厂面试题、项目视频、学习路线,包括(Qt C++基础,数据库编程,Qt项目实战、Qt框架、QML、Opencv、qt线程等等)有需要的可以进企鹅裙937552610领取哦~

例子解析#

想要解析JSON你首先得把一系列的JSON字符串转换成实例化的QJsonDocument对象,然后才能调用QJsonObject或者QJsonArray进行解析。

例子解析分析:

// 以下皆用初始化好了的QJsonDocumentQJsonDocument m_document;QFile jsonFile("testJson.json");file.open(QIODevice::ReadOnly);QByteArray jsonBa = file.readAll();QJsonParseError error;m_document = QJsonDocument::fromJson(jsonBa, &error);jsonFile.close();

1.解析基本的数组

["ZhangSan","Lisi","WangWu"]

解析步骤为:

获取对应的QJsonArray数组用下标访问的方法,意义获取数组里的值QJsonValue输出值的内容

代码实现如下:

// 开始解析QJsonArray array;if (m_document.isArray()) {    array = m_document.array();}for (int i = 0; i < array.size(); i++) {    QJsonValue value = array.at(i);    qDebug() << value.toString();}

2.解析基本的对象

{  "name":"Zhangsan",  "id":"1"}

解析步骤为:

获取对应的QJsonObject对象获取对象里的所有键(QString)逐一输出键对应的值(QJsonValue)

代码实现如下:

// 开始解析QJsonObject object;if (m_document.isObject()) {    object = m_document.object();}foreach (QString key, object.keys()) {    qDebug() << object.value(key).toString();}

3.解析JSON数组组合JSON对象

[  {    "name":"Zhangsan",    "id":"1"  }, {"name":"Lisi",    "id":"2"  }, {    "name":"Wangwu",    "id":"2"  }]

解析步骤为:

获取对应的QJsonArray数组用下标访问的方式来获取值(QJsonValue)如果其中一个值是对象(QJsonObject),就获取这个对象,然后按照对象的解析方法来解析。

代码实现如下:

QJsonArray array;if (m_document.isArray()) {    array = m_document.array();}for (int i = 0; i < array.size(); i++) {    if (array.at(i).isObject()) {        QJsonObject object = array.at(i).toObject();        if (object.contains("name")) {            qDebug() << object.value("name").toString();        }    }}

4.解析JSON对象组合JSON数组

{  "type":"1",  "member":["Zhangsan", "Lisi", "Wangwu"]}

解析步骤为:

获取对应的JSON对象(QJsonObject)获取指定键对应的值(QJsonValue)如果这个值是一个数组(QJsonArray),按照数组的解析方式来解析

代码实现如下:

QJsonObject object;if (m_document.isObject()) {    object = m_document.object();}if (object.contains("member")) {    QJsonArray array = object.value("member").toArray();    qDebug() << array[0].toString();    qDebug() << array[1].toString();    qDebug() << array[2].toString();}

标签: #jqueryeach解析json