目录
一、json相关类和接口
1.QJsonDocument
2.QJsonObject
3.QJsonArray
4.QJsonValue
二、json写文件
1.写文件基本流程
2.代码示例
三、json读文件
1.读文件基本流程
2.代码示例
json是一种轻量级的数据交换格式,在Qt中使用json数据可以通过Qt提供的QJsonDocument、QJsonObject、QJsonArray和QJsonValue类来实现。
一、json相关类和接口
1.QJsonDocument
QJsonDocument类用于处理json数据,它可以将json数据解析为QJsonDocument对象,也可以将QJsonDocument对象转换为json字符串或二进制数据。
主要接口:
- fromJson():用于将json数据解析为QJsonDocument对象。
- toJson():用于将QJsonDocument对象转换为json字符串或二进制数据。
- isArray():用于判断文档是否包含一个数组。
- isObject():用于判断文档是否包含一个对象。
- array():用于提取文档中的数组。
- object():用于提取文档中的对象。
2.QJsonObject
QJsonObject类用于表示json对象,提供了插入键值对、获取值、检查键是否存在等功能。
主要接口:
- insert():用于向json对象中插入键值对。
- value():可以通过key值获取value值。
- contains():检查json对象中是否包含指定key。
- find():返回json对象中键为指定key的键值对的迭代器。
- remove():用于删除json对象中指定键值对。
3.QJsonArray
QJsonArray类用于表示json数组,提供了添加元素、获取元素、获取数组大小等功能。
主要接口:
- append():用于在json数组的尾部添加元素。
- insert():用于在json数组的指定索引前添加元素。
- at():用于获取json数组中指定索引处的元素。
- size():用于获取json数组的大小。
- removeAt():用于删除json数组中指定索引处的元素。
4.QJsonValue
QJsonValue类可以封装json支持的几种类型,包括字符串、数字、布尔值、对象、数组和空值。
主要接口:
- isString():用于判断值是否为字符串。
- isDouble():用于判断值是否为数字。
- isBool():用于判断值是否为布尔类型。
- isArray():用于判断值是否为数组。
- isObject():用于判断值是否为对象。
- isNull():用于判断值是否为空值类型。
- toString():用于将值转换为字符串。
- toDouble():用于将值转换为数字。
- toBool():用于将值转换为布尔类型。
- toArray():用于将值转换为数组。
- toObject():用于将值转换为对象。
二、json写文件
1.写文件基本流程
- 构建结构(QJsonObject/QJsonArray)
- 填充数据(insert/append)
- QJsonDocument转换为QByteArray(toJson)
- 写入文件(QFile)
2.代码示例
QJsonObject jsonObj; jsonObj.insert("name","Mike"); jsonObj.insert("age",30); QJsonArray hobbies; hobbies.append("reading"); hobbies.append("writing"); jsonObj.insert("hobbies",hobbies); QJsonDocument jsonDoc(jsonObj); QByteArray jsonData = jsonDoc.toJson(); QFile file("D:/test.json"); if(!file.open(QIODevice::WriteOnly)) qDebug()<<"error"; file.write(jsonData); file.close();
复制
三、json读文件
1.读文件基本流程
- 从文件读取到QByteArray(QFile)
- QByteArray转换为QJsonDocument(fromJson)
- QJsonDocument转换为QJsonObject/QJsonArray(object/array)
- 读取数据(value/at)
2.代码示例
QFile file("D:/test.json"); if(!file.open(QIODevice::ReadOnly)) qDebug()<<"error"; QByteArray data = file.readAll(); file.close(); QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonStr); if (jsonDoc.isObject()) { QJsonObject jsonObj = jsonDoc.object(); QStringList keys = jsonObj.keys(); for (const QString &key : keys) { QJsonValue value = jsonObj.value(key); if (value.isString()) { qDebug() << key << ": " << value.toString(); } else if (value.isDouble()) { qDebug() << key << ": " << value.toDouble(); } } } else if (jsonDoc.isArray()) { QJsonArray jsonArray = jsonDoc.array(); for (int i = 0; i < jsonArray.count(); i++) { QJsonValue value = jsonArray.at(i); if (value.isString()) { qDebug()<<value.toString(); } else if (value.isDouble()) { qDebug()<<value.toDouble(); } else if (value.isBool()) { qDebug()<<value.toBool(); } else if (value.isNull()) { qDebug()<<"null"; } } }
复制