网站首页 > java教程 正文
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进行解析。
例子解析分析:
// 以下皆用初始化好了的QJsonDocument
QJsonDocument 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();
}
- 上一篇: JSON是什么?JSON的使用详解
- 下一篇: 什么是JSON?
猜你喜欢
- 2025-08-02 从上百个字段到1个CLOB:Oracle JSON存储实战指南
- 2025-08-02 什么是JSON?
- 2025-08-02 JSON是什么?JSON的使用详解
- 2025-08-02 mysql 之json字段详解(多层复杂检索)
- 2025-08-02 MySQL的json查询之json_array
- 2025-08-02 C#解析多层嵌套的JSON数组
你 发表评论:
欢迎- 08-02从上百个字段到1个CLOB:Oracle JSON存储实战指南
- 08-02什么是JSON?
- 08-02Qt解析JSON
- 08-02JSON是什么?JSON的使用详解
- 08-02mysql 之json字段详解(多层复杂检索)
- 08-02MySQL的json查询之json_array
- 08-02C#解析多层嵌套的JSON数组
- 08-02Dart编程学习笔记05-列表与映射表
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)