Qt解析JSON
Qt解析JSON
文中图片来自菜鸟教程runnob
QT 解析json的三件套,QJsonDocument、QJsonObject、QJsonArray、QJsonValue#
要搞清楚这几个东西,首先得搞清楚JSON得结构。
JSON主要是有几种格式:
JSON主要格式#
-
图片中即为JSON中对象的格式,他由一对花括号({})作为包围,对象可以包含很多键值对(Key-Value),每个键(Key)用引号(“”)括起来,键和值之间用冒号分隔(:),值(Value)可以是bool、数字、字符串、对象、数组或者null。键值对之间用逗号(,)分开。
{ "type":1, "msg":"Hello World!", "nullable":true, "member":["ZhangSan", "Lisi", "WangWu"], "info":{ "name":"Zhangsan", "id":"1" } }
这里就是一个键值对组成得对象。
-
如图所示,数组是由一系列值(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文档。
例子解析#
想要解析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();
-
解析基本的数组
["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(); }
-
解析基本的对象
{ "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(); }
-
解析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(); } } }
-
解析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(); }
作者:师从名剑山
出处:https://www.cnblogs.com/codegb/p/16653435.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器