json文件格式、常见c/c++的json库
cjson–生成/解析json文件、cjson 结构体
QT中的json
第三篇 QT中的json
-
QJson 常见的类
QJsonDocument
QJsonObject
QJsonArray
QJsonValue – QT中对应的JSON 中 6 种基本数据类型
QJsonParseError -
QJsonDocument —用于读和写 JSON 文档
解析器非常快且高效,并将 JSON 转换为 Qt 使用的二进制表示。
QJsonDocument::fromJson()
基于文本表示的JSON 文档转化为QJsonDocument
toJson()
–QJsonDocument
反向转化为文本。!isNull()
查询已解析文档的有效性isArray()
和isObject()
查询一个 JSON 文档是否包含一个数组或一个对象array()
或object()
检索包含在文档中的数组或对象,然后读取或操作。
-
QJsonArray — 封装了一个 JSON 数组
JSON
数组是值的列表。可以通过从数组中插入和删除QJsonValue
来操作列表。
一个QJsonArray
可以和一个QVariantList
相互转换。size()
来查询条目的数量insert()
在指定索引处插入值removeAt()
来删除指定索引的值。
-
QJsonObject — 封装了一个 JSON 对象
一个
JSON
对象是一个“key/value 对”列表,key 是独一无二的字符串,value由一个QJsonValue
表示。
一个QJsonObject
可以和一个QVariantMap
相互转换。size()
来查询“key/value 对”的数量insert()
插入“key/value对”remove()
删除指定的 key。
-
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()
等转化成相应的存储类型
-
QJsonParseError — 用于在 JSON 解析中报告错误
枚举 QJsonParseError::ParseError,描述 JSON 文档在解析过程中所发生的错误类型
常量 | 值 | 描述 |
---|---|---|
QJsonParseError::NoError | 0 | 未发生错误 |
QJsonParseError::UnterminatedObject | 1 | 对象不正确地终止以右花括号结束 |
QJsonParseError::MissingNameSeparator | 2 | 分隔不同项的逗号丢失 |
QJsonParseError::UnterminatedArray | 3 | 数组不正确地终止以右中括号结束 |
QJsonParseError::MissingValueSeparator | 4 | 对象中分割 key/value 的冒号丢失 |
QJsonParseError::IllegalValue | 5 | 值是非法的 |
QJsonParseError::TerminationByNumber | 6 | 在解析数字时,输入流结束 |
QJsonParseError::IllegalNumber | 7 | 数字格式不正确 |
QJsonParseError::IllegalEscapeSequence | 8 | 在输入时,发生一个非法转义序列 |
QJsonParseError::IllegalUTF8String | 9 | 在输入时,发生一个非法 UTF8 序列 |
QJsonParseError::UnterminatedString | 10 | 字符串不是以引号结束 |
QJsonParseError::MissingObject | 11 | 一个对象是预期的,但是不能被发现 |
QJsonParseError::DeepNesting | 12 | 对解析器来说,JSON 文档嵌套太深 |
QJsonParseError::DocumentTooLarge | 13 | 对解析器来说,JSON 文档太大 |
QJsonParseError::GarbageAtEnd | 14 | 解析的文档在末尾处包含额外的乱码 |
基本的用法比较简单,细节很关键,建议在处理的过程中启用严格模式,例如:先通过 QJsonParseError::NoError 判断转化 JSON 文档无误,再进行解析。在解析过程中,先判断 QJsonValue 是否为对应的类型如 isObject(),再通过 toObject() 转化。
参考: https://blog.csdn.net/best_zyj/article/details/78980271
代码示例
参见码云项目:https://gitee.com/orange-ren/SystemCode/tree/master/QJson%E4%BD%BF%E7%94%A8