1 什么是json
JSON的全称是”JavaScript Object Notation”JS 对象简谱)
意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式
是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
2 Qt 5 新增加了处理 JSON 的类
Qt 5 新增加了处理 JSON 的类,均以 QJson 开头,在 QtCore 模块中,不需要额外引入其它模块
3 QJsonDocument类
1.提供了读写Json文档的方式
- JsonDocument::fromJson() ---------- 得到json文档对象
- 转换为json对象
object()-------------------对键值对操作
- 转换为json数组
array();
2.json字符串 -> json对象/json数组
3.json对象/json数组 -> json字符串
4 QJsonObject QJsonArray QJsonValue
- 在使用json对象或json数组对象得到对应的value之后,该value值并不是最终的数据类型而是一个QJsonValue类型的属性,我们必须通过该对象判断该类型的实际类型,然后在将其转换为对应的数据类型:
- 类型判断相关的成员方法:
bool isArray() const 是否为json数组 bool isBool() const 是否为布尔类型 bool isDouble() const 是否为浮点类型 bool isNull() const 是否为空 bool isObject() const 是否为json对象 bool isString() const 是否为字符串类型
5 案例
json的读写
// 创建json对象 QJsonObject obj; QJsonObject sub; sub.insert("IP", QJsonValue("192.168.166.25")); sub.insert("port", "9990"); obj.insert("server", QJsonValue(sub)); // 内存中的json数据写入内存 QJsonDocument doc(obj); // 将json对象转换为 字符串 QByteArray data = doc.toJson(); // 字符串写入文件 QFile file("D:\\temp.json"); file.open(QIODevice::WriteOnly); file.write(data); file.close(); // 读json文件 QFile file("D:\\temp.json"); file.open(QIODevice::ReadOnly); QByteArray data = file.readAll(); file.close(); // 使用json文档对象加载json字符串 QJsonDocument doc = QJsonDocument::fromJson(data); // 判断是数组还是对象 if(doc.isObject()) { QJsonObject obj = doc.object(); QJsonValue value = obj.value("server"); if(value.isObject()) { QJsonObject subobj = value.toObject(); // 取值 QString ip = subobj.value("IP").toString(); QString port = subobj.value("port").toString(); qDebug() << ip << port; } }