阡陌 发表于 2024-1-19 01:48:15

Qt JSON 库



Qt 的 JSON 库由几种对象和相应的头文件组成,主要的有:

## QJsonDocument

该类用于操作 JSON 文档。

从文件到文档对象实例:

```
QJsonDocument jDoc(QJsonDocument::fromJson(file.readAll()))
```

此外还有 `fromBinaryData()` 或 `fromRawData()` 方法。

JSON 对象 obj 到 文档 到文件:

```
QJsonDocument jDoc(obj);
file.write(jDoc.toJson(QJsonDocument::Indented));
```



## QJsonObject

QJsonObject 是一个重要的类型,它就是JSON 中的“对象”概念。一个对象就是一个键值对。
使用 `insert()` 插入一个键值对或覆盖一个已存在的键值对还可以删掉一个键值对, 用 `remove()` 可以删除一个键值对。



## QJsonArray

它是 JSON 数组类,可以存储多个没有键的值(QJsonValue)



## QJsonValue

QJsonValue 也是一个重要的常用类型,它是键值对的值或是数组的值。而值可以是一个键值对,也可以是一个数组,还可以是其它类型:
bool(QJsonValue::Bool)
double(QJsonValue::Double)
string(QJsonValue::String)
array(QJsonValue::Array)
object(QJsonValue::Object)
null(QJsonValue::Null)

要操作一个对象类型的值,要先把值转换成对象副本才可以:

```
QJsonValue.toObject()
```

所以不能直接修改一个值 ValueA 下面的某个键的值 ValueB,只能将这个值 ValueA 转换成 ObjectA 然后修改 Object 的某个键的值 ValueB,然后再用对象 ObjectA 覆盖 ValueA(可以用 insert 方法)。如果要修改多层次的某个值,就要采用递归的方法一级一级找到要修改的值,然后用高层次的对象覆盖。这点就比 python 的 json 数据操作麻烦点。


页: [1]
查看完整版本: Qt JSON 库