QT-Json的写入
本随记用于记录Qt Creater 中json文件的写
1 什么是json
json是轻量级的文本数据交换格式,它具有简洁和清晰的层次结构,易于人阅读和编写,同时也易于机器解析和生成等优势。
json的标准格式包含数组与对象。
对象用花括号括起来的逗号分割的成员构成,成员是键(key)和值(value)由逗号分割的键值对组成,键与值由:(冒号)隔开。如:
{"name": "John Doe", "age": 18, "address": {"country" : "china", "zip-code": "10000"}}
数组是由方括号括起来的一组值构成。如:
[3, 1, 4, 1, 5, 9, 2, 6]
也包含如下合法的格式:
{"a": 1, "b": [1, 2, 3]}
[1, 2, "3", {"a": 4}]
1.1 Qt creater写json文件的方法
方案1:
用Qt creater写json的方式很多,笔者初次接触Qt creater时对Qt不熟悉,写的第一份json文件采用了暴力的向文本内append字符的方式,写简单的json文件还好,当json文件比较复杂时,此种方法有一个极大的痛点,总需要去删除最后一个json对象的逗号。而实现起来代码比较冗余。笔者在此不对次方案做更多介绍,也不推荐这种写法。
方案2:
由于之前的方案可行度低,于是我在网上搜索了一下Qt写json的方法,不同的作者有不同的写法,但都调用了Qt自带的读写json的方法。包括QJsonDocument 、QJsonObject 、QJsonArray,当使用这些方法时许包含它们的头文件。
2 写json
我们知道了可以用**QJsonDocument 、QJsonObject 、QJsonArray **来写json文件,现在我们就来小试牛刀吧。
我们先来完成一个简单的json写入,json格式为如下:
{
"name":"zhangsan",
"age":14
}
写入方法1如下:
QJsonDocument json_doc;//创建json文件
QJsonObject json_obj;//创建json对象
json_obj.insert("name","zhangsan");
json_obj.insert("age",14);
json_doc.setObject(json_obj);//将json对象转为json文件
file.write(json_doc.toJson(QJsonDocument::Indented));//写入文件
file.close();
写入方法2如下:
QJsonDocument json_doc;//创建json文件
QJsonObject json_obj{
{"name","zhangsan"},
{"age",14}
};
json_doc.setObject(json_obj);//将json对象转为json文件
file.write(json_doc.toJson(QJsonDocument::Indented));//写入文件
file.close();
两种方式各有其特点吧,方法2更直观一点,笔者更喜欢选用方法1一点,按个人喜好就行。现在我们来完成一个稍微复杂一点的json格式写入。
json格式如下:
{
"name":"zhangsan",
"frinds":
[
{"name":"lisi"},
{"name":"wanger"}
]
}
先来看看这个json格式,最外层为一个花括号为json对象,里面有name和friends两个key,friends的value为一个数组,数组内包含了两个对象。因为json的构建都是由内向外层构建,因此jsondocument的构建方法为:
①构建最内层的两个jsonobject分别存放对象内的键值对
②构建一个jsonarray
③将两个jsonobject放入jsonarray中
④构建最外层的jsonobject
⑤将jsonarray放入最外层jsonobject中
写入方法如下:
QJsonObject Member1, Member2;//创建两个朋友对象
//初始化两个朋友名字
Member1["name"] = "lisi";
Member2["name"] = "wanger";
QJsonDocument json_doc;//创建json文件
QJsonObject json_obj;//创建json对象
QJsonArray girlfrinds_array;//存放两个朋友的数组
//将两个朋友对象加入到数组内
girlfrinds_array.append(Member1);
girlfrinds_array.append(Member2);
json_obj.insert("name","zhangsan");
json_obj.insert("girlfrinds",girlfrinds_array);
json_doc.setObject(json_obj);//将json对象转为json文件
file.write(json_doc.toJson(QJsonDocument::Indented));//写入文件
file.close();
以上为我在学习中总结的Qt软件中可以完成json的写入的方法,欢迎大家参考与指正,谢谢~