• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

vin8-13

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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的写入的方法,欢迎大家参考与指正,谢谢~

posted on 2022-06-27 16:22  问浪  阅读(922)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3