QT5 - ubuntu18 -JSON 菜鸟学习

JSON 常用类

1、QJsonDocument

QJsonDocument 类用于读和写 JSON 文档。

一个 JSON 文档可以使用 QJsonDocument::fromJson() 从基于文本的表示转化为 QJsonDocument, toJson() 则可以反向转化为文本。解析器非常快且高效,并将 JSON 转换为 Qt 使用的二进制表示。

已解析文档的有效性,可以使用 !isNull() 进行查询。

如果要查询一个 JSON 文档是否包含一个数组或一个对象,使用 isArray() 和 isObject()。包含在文档中的数组或对象可以使用 array() 或 object() 检索,然后读取或操作。

也可以使用 fromBinaryData() 或 fromRawData() 从存储的二进制表示创建来 JSON 文档。

2、QJsonArray

QJsonArray 类封装了一个 JSON 数组。

JSON 数组是值的列表。列表可以被操作,通过从数组中插入和删除 QJsonValue 。

一个 QJsonArray 可以和一个 QVariantList 相互转换。可以使用 size() 来查询条目的数量,通过 insert() 在指定索引处插入值,removeAt() 来删除指定索引的值。

3、QJsonObject

QJsonObject 类封装了一个 JSON 对象。

一个 JSON 对象是一个"key/value 对"列表,key 是独一无二的字符串,value 由一个 QJsonValue 表示。

一个 QJsonObject 可以和一个 QVariantMap 相互转换。可以使用 size() 来查询"key/value 对"的数量,通过 insert() 插入"key/value 对", remove() 删除指定的 key。

4、QJsonValue

QJsonValue 类封装了一个值。

JSON 中的值有 6 种基本数据类型:

bool(QJsonValue::Bool)

double(QJsonValue::Double)

string(QJsonValue::String)

array(QJsonValue::Array)

object(QJsonValue::Object)

null(QJsonValue::Null)

一个值可以由任何上述数据类型表示。此外,QJsonValue 有一个特殊的标记来表示未定义的值,可以使用 isUndefined() 查询。

值的类型可以通过 type() 或 isBool()、isString() 等访问函数查询。同样地,值可以通过 toBool()、toString() 等函数转化成相应的存储类型。

5、QJsonParseError

QJsonParseError 类用于在 JSON 解析中报告错误。

枚举 QJsonParseError::ParseError:

该枚举描述 JSON 文档在解析过程中所发生的错误类型。

6、json文件标识解释

所有的vale类型判断,都可以使用isNull isBool isDouble isString isArray isObject 进行判断,进行无线套娃解析。

对于JSON来说,就是键值对,key为字符串,value为无限嵌套的各种类型。

1、花括弧 表示对象,使用QJsonObject

{

... ...

}

2、中括弧 标识为数组 使用 QJsonArray

... ...

3、如果 :" " 标识字符串 通过isString() 进行判断

例如:

QStringList keys = objectRoot.keys();

for(auto key:keys)

{

QJsonValue jsonValue = objectRoot.value(key);

if(jsonValue.isString())

{

qDebug() <<FILE <<LINE << key << ": " << jsonValue.toString();

}

//其他判断:isNull isBool isDouble isString isArray isObject

}

4、也可以理解为递归调用的逻辑,遇到object就会进行isNull isBool isDouble isString isArray isObject判断和处理,直到最后的一个object解析完毕。

相关推荐
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [drivers][input]serio
linux·笔记·学习
ZH15455891313 小时前
Flutter for OpenHarmony Python学习助手实战:GUI桌面应用开发的实现
python·学习·flutter
编程小白20263 小时前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
学历真的很重要3 小时前
【系统架构师】第二章 操作系统知识 - 第二部分:进程与线程(补充版)
学习·职场和发展·系统架构·系统架构师
深蓝海拓4 小时前
PySide6,QCoreApplication::aboutToQuit与QtQore.qAddPostRoutine:退出前后的清理工作
笔记·python·qt·学习·pyqt
酒鼎4 小时前
学习笔记(3)HTML5新特性(第2章)
笔记·学习·html5
L***一4 小时前
2026届大专跨境电商专业毕业生就业能力提升路径探析
学习
.小墨迹4 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
ZH15455891314 小时前
Flutter for OpenHarmony Python学习助手实战:模块与包管理的实现
python·学习·flutter
Gain_chance4 小时前
33-学习笔记尚硅谷数仓搭建-DWS层交易域用户粒度订单表分析及设计代码
数据库·数据仓库·hive·笔记·学习·datagrip