qt学习:json数据文件读取写入

目录

什么是json

基本格式

例子  解析json文件数据到界面上

组合json数据文档对象


什么是json

json是一种轻量级的数据交互格式,简单来说,json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互

基本格式

以键值对的形式存放

  • 键-----字符串
  • 值------基本数据类型,字符串,json对象,json数组

例如

{“name":"xxx","age":21
}

例子  解析json文件数据到界面上

json文件

{"error_code": 0,"reason": "Success","result": {"data": [{"content": "有一天晚上我俩一起吃西瓜,老大把西瓜籽很整洁的吐在了一张纸上,\r\n过了几天,我从教室回但宿舍看到老大在磕瓜子,\r\n我就问他:老大,你什么时候买的瓜子?\r\n老大说:刚晒好,说着抓了一把要递给我……","hashId": "bcc5fdc2fb6efc6db33fa242474f108a","unixtime": 1418814837,"updatetime": "2014-12-17 19:13:57"},{"content": ""我女朋友气跑了"\r\n"怎么回事?严重吗?你怎么着她了?"\r\n"不严重,我只是很久没用了"","hashId": "03a6095c18e1d6fe7e2c19b2a20d03d1","unixtime": 1418814837,"updatetime": "2014-12-17 19:13:57"},{"content": "还说神马来一场说走就走的旅行,\r\n工作后就连一场说走就走的下班都不行。","hashId": "10edf75c1e7d0933c91f0f39a28a2c84","unixtime": 1418814837,"updatetime": "2014-12-17 19:13:57"},{"content": "高速路上堵车,路边葡萄地里有一哥们竟然在偷葡萄,心想太没素质了吧!\r\n不管了我也去,刚溜进葡萄地,那哥们竟问我干嘛,\r\n我撇了一眼反问道你干嘛呢?\r\n那哥们答道摘葡萄呢!\r\n我答道:我也摘葡萄呢!\r\n哥们郁闷了说我摘我家的你呢?\r\n我顿时脸红,哥你家葡萄咋卖呢?","hashId": "bb572bb5b4844badb31012983f7324f5","unixtime": 1418814837,"updatetime": "2014-12-17 19:13:57"},{"content": "和老婆在街边散步,我手上捏着一张已揉成一团的传单,\r\n走了好一会终于看到个垃圾桶,我赶紧跑过去想扔掉,\r\n没想到老婆从后边一把拉住我说:老公,那个肯定吃不得了,别捡。\r\n我一愣,发现垃圾桶顶盖上放着半个西瓜。","hashId": "7ebccd3bbfaf24e010f9eb3ee68234bd","unixtime": 1418814837,"updatetime": "2014-12-17 19:13:57"},{"content": "某考生考了个倒数第一,回到家被他爸一顿暴揍,\r\n来到学校老师让他谈谈落后的体会,\r\n学生:“我终于明白了“落后就要挨打”的道理。”","hashId": "4aee2aa6a79c67682f605c4146a8eca4","unixtime": 1418814837,"updatetime": "2014-12-17 19:13:57"},{"content": "很多人不喜欢朝九晚五的生活,然后开始创业。\r\n最终,他的生活变成了朝五晚九。","hashId": "7b358c4b96cf4a8d82b85545ea8f9603","unixtime": 1418814837,"updatetime": "2014-12-17 19:13:57"},{"content": "钱这个东西,真是害人精。\r\n小到人与人之间的矛盾,大到国家之间的战争,无不是为了钱。\r\n钱可以把人推上万众瞩目之颠,也可以使人瞬间变成阶下囚。\r\n可是,富人们却没认识到,当钱几辈子花不完时,\r\n挣再多已经没有意义,还不如早日尽点社会责任,\r\n捐助给需要的人,求得个平安幸福。\r\n看到这个的有钱人们呐,你们什么时侯能捐我点啊!","hashId": "94e18075f8c9c8211dfed5f8d6a62983","unixtime": 1418814837,"updatetime": "2014-12-17 19:13:57"},{"content": "看到一句很好的名言:我们无法拉伸生命的长度,但是我们可以拓展生命的宽度。\r\n我觉得这句话太有道理了!\r\n意思就是:虽然我们无法再长高了,但是我们还可以继续长胖。","hashId": "fd8e364a4c70d46e77c1610879748a9a","unixtime": 1418814837,"updatetime": "2014-12-17 19:13:57"},{"content": "女生口中所说的“理工男好萌好棒好想嫁!”,\r\n其实理工男是指“会修电脑、会设置手机、会安家用电器、\r\n会帮做PPT打EXCEL表PS修图、话少、高冷、专一、不和乱七八糟的女生来往、\r\n不爱打扮却又干净清爽、高高瘦瘦、手指纤长、戴黑框眼镜超好看的帅哥”。\r\n其实找个帅哥让他学电脑,再戴个眼镜就OK了。","hashId": "5001c08a3cc8a281b15c467bc15a4911","unixtime": 1418814837,"updatetime": "2014-12-17 19:13:57"}]}
}

加入头文件

#include <QJsonDocument> //json文档类
#include <QJsonObject> //json对象
#include <QJsonArray>  //json数组
#include <QJsonValue>  //json值
#include <QFile>
#include <QDebug>

代码

//1打开文件QFile file("./ke.json");bool ret = file.open(QIODevice::ReadOnly);if(ret == false){qDebug()<<"open error";}
//2读取文件的内容QByteArray content = file.readAll();
//3关闭文件file.close();
//4将读取出来的普通文本内容 转换为  json文档对象
//使用QJsonDocument::fromJson()将JSON文档从其基于文本的表示转换为QJsonDocument。QJsonDocument doc = QJsonDocument::fromJson(content);
//5利用这个json文档对象 将其转换为 json对象QJsonObject object = doc.object();
//6利用json对象中的接口,通过键  就能得到值
//值 = object.value(键)
//得到 键 "result"  的值 ,该值 是一个json对象QJsonObject resultObject = object.value("result").toObject();
//7通过 键 "data"  得到 值 ,该值是一个json数组QJsonArray dataArray = resultObject.value("data").toArray();
//8遍历数组中的每个元素,每个都是都是json对象for(int i=0; i<dataArray.size(); i++){//每个元素都是一个json对象QJsonObject item = dataArray.at(i).toObject();//将每个对象中的键 "content" 所对应的值  获取出来QString content = item.value("content").toString();//添加到界面上ui->textBrowser->append(content);}

例子 组合json数据文档对象

//1新建json对象{}
QJsonObject object0;
//2向json对象加入一个数据,{“aaa”:"111",“bbb”:1}
object0.insert("aaa",QJsonValue("111"));
object0.insert("bbb",QJsonValue(1));//3再新建两个相同数据的对象
//{“ccc”:"222",“ddd”:2}
QJsonObject object1;
object1.insert("ccc",QJsonValue("222"));
object1.insert("ddd",QJsonValue(2));
//{“eee”:"222",“fff”:2}
QJsonObject object2;
object2.insert("eee",QJsonValue("333"));
object2.insert("fff",QJsonValue(3));//4将三个对象放到数组里
//[{“aaa”:"111",“bbb”:1},{“ccc”:"222",“ddd”:2},{“eee”:"222",“fff”:2}]
//新建一个数组
QJsonArray array;
array.insert(0,object0);
array.insert(1,object1);
array.insert(2,object2);//5新建一个对象,存放数组
//{“ggg”:[{“aaa”:"111",“bbb”:1},{“ccc”:"222",“ddd”:2},{“eee”:"222",“fff”:2}]}
QJsonObject object;
object.insert("ggg",QJsonValue(array));//6转换为json文件对象
QJsonDocument doc(object);//7将json对象转换成普通的文本数据
QByteArray content = doc.toJson();//8打开文件
QFile file("./xxx.json");
file.open(QIODevice::ReadWrite);//9写入文件
file.write(content);//10关闭文件
file.close();

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/653004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Top100 子串

1.560. 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#…

VUE引入DataV报错记录

DataV官网&#xff08;不支持Vue3&#xff09;&#xff1a;Welcome | DataV 一、按照官网引入后报错 【1】 Failed to resolve entry for package "dataview/datav-vue3". The package may have incorrect main/module/exports specified in its package.json. 将…

服务器托管与虚拟主机租用有哪些区别?

服务器托管又称为主机托管&#xff0c;是用户自身拥有一台服务器放置在数据中心的机房里&#xff0c;主要是由客户自己进行维护&#xff0c;用户自身就可以进行操作系统&#xff0c;企业将服务器放置在专用的托管服务器机房中&#xff0c;可以享受到稳定舒适的机房环境&#xf…

ARC143D Bridges

题目 把 i i i 和 i n in in 看作一个点&#xff0c;对所有 a i a_i ai​ 和 b i b_i bi​ 连边&#xff0c;得到的图称为 G G G&#xff0c;则 G G G 的割边 ( a i , b i ) (a_i,b_i) (ai​,bi​) 在原图中 ( a i , b i n ) (a_i,b_in) (ai​,bi​n) 或 ( a i n ,…

【Matlab】音频信号分析及FIR滤波处理——凯泽(Kaiser)窗

一、前言 1.1 课题内容: 利用麦克风采集语音信号(人的声音、或乐器声乐),人为加上环境噪声(窄带)分析上述声音信号的频谱,比较两种情况下的差异根据信号的频谱分布,选取合适的滤波器指标(频率指标、衰减指标),设计对应的 FIR 滤波器实现数字滤波,将滤波前、后的声音…

贪吃蛇/链表实现(C/C++)

本篇使用C语言实现贪吃蛇小游戏&#xff0c;我们将其分为了三个大部分&#xff0c;第一个部分游戏开始GameStart&#xff0c;游戏运行GameRun&#xff0c;以及游戏结束GameRun。对于整体游戏主要思想是基于链表实现&#xff0c;但若仅仅只有C语言的知识还不够&#xff0c;我们还…

Compose开发No virtual method at(Ljava/lang/Object;I)错误【已解决】

此问题主要是在用CircularProgressIndicator时报错的&#xff0c;其他没遇到。 在升级不同版本时出现了不少问题&#xff0c;现在记录一下 1、mutableIntStateOf()函数的出现 要将此条版本更新到2.6.2及以上 implementation("androidx.lifecycle:lifecycle-runtime-ktx:…

学习笔记推荐:极客时间《Java常见错误100例》

最近&#xff0c;我有幸接触了一套非常精彩的学习笔记&#xff0c;《Java常见错误100例》。&#xff08;手册链接在文末&#xff01;&#xff01;&#xff01;&#xff09; 这套学习笔记出自极客时间&#xff0c;对于想要在 Java 开发领域深耕细作的朋友们来说&#xff0c;它无…

SpringBoot内置工具类

Collections java.util包下的Collections类&#xff0c;该类主要用于操作集合或者返回集合 一、排序 List<Integer> list new ArrayList<>();list.add(2);list.add(1);list.add(3);Collections.sort(list);//升序System.out.println(list);Collections.reverse(…

hot100 -字母异位词分组

题目介绍 给定一个字符串数组&#xff0c;要求将其中的字母异位词组合在一起&#xff0c;并可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[…

WPF的ViewBox控件

在WPF中&#xff0c;ViewBox是一个用于缩放和调整其子元素大小的容器控件。它可以根据可用空间自动调整子元素的大小&#xff0c;以使其适应ViewBox的边界。这使得在不同尺寸的窗口或布局中保持元素的比例和缩放变得更加容易。 ViewBox具有以下重要属性&#xff1a; Stretch&…

基于Python flask MySQL 猫眼电影可视化系统设计与实现

1 绪论 1.1 设计背景及目的 猫眼电影作为国内知名的电影信息网站&#xff0c;拥有海量的电影信息、票房数据和用户评价数据。这些数据对于电影市场的研究和分析具有重要意义。然而&#xff0c;由于数据的复杂性和数据来源的多样性&#xff0c;如何有效地采集、存储和展示这些数…

【Linux 内核源码分析】多核调度分析

多核调度 SMP&#xff08;Symmetric Multiprocessing&#xff0c;对称多处理&#xff09;是一种常见的多核处理器架构。它将多个处理器集成到一个计算机系统中&#xff0c;并通过共享系统总线和内存子系统来实现处理器之间的通信。 首先&#xff0c;SMP架构将一组处理器集中在…

程序员的基本素养之——R语言起源、特点以及应用

R语言是一种功能强大的数据分析、统计建模、可视化、 免费、开源且跨平台的编程语言 作为用于数据统计的必备技能语言&#xff0c;博主目前正在对R语言进行基本的学习&#xff0c;这也是生物信息学领域进行统计分析的必备语言之一。下面跟我来一起看看吧&#xff01; R语言是一…

鸿蒙自定义Http网络访问组件

前言 DevEco Studio版本:4.0.0.600 使用效果 如何使用 参考文档:OpenHarmony http数据请求 1、module创建 File-->New-->Module,选择Static Library 2、相关类创建 HttpCore:Http的核心类,用于http的请求 RequestMethod:http请求的类型,包含:GET、POST等 …

基本数据类型细节【java】

整形细节 1.java个整数类型有固定的范围和字段长度&#xff0c;不受具体OS【操作系统】的影响&#xff0c;以保证java程序的移植性 2.java的整型常量默认为int型&#xff0c;声明long型常量须在后面加l或者L int n1 1;//4个字节 //int n2 1L;//不对 long n3 1L; //对 3.J…

你好,C++(9)坐216路公交车去买3.5元一斤的西红柿——C++中如何表达各种数值数据 3.3 数值数据类型

3.3 数值数据类型 从每天早上睁开眼睛的那一刻开始&#xff0c;我们几乎每时每刻都在与数字打交道&#xff1a;从闹钟上的6点30分&#xff0c;到上班坐的216路公共汽车&#xff1b;从 新闻中说的房价跌到了100元每平米到回家买菜时的西红柿3.5元一斤。我们生活在一个充满数字的…

个性化联邦学习所面临的挑战:

个性化联邦学习所面临的挑战&#xff1a; 1、Federated Learning with Personalization Layers Li等人(2019)最近发表的综述文章阐述了联邦学习系统面临的许多独特挑战。其中一个挑战是&#xff0c;不同客户端的有效数据分布可能在参与的设备之间(可能有数百万台)差异很大。这…

04.领域驱动设计:了解聚合和聚合根,怎样设计聚合

目录 1、概述 2、聚合 3、聚合根 4、怎么设计聚合 4.1 聚合的构建过程主要步骤 第 1 步&#xff1a;采用事件风暴。 第 2 步&#xff1a;选出聚合根。 第 3 步&#xff1a;找出与聚合根关联的所有紧密依赖的实体和值对象。 第 4 步&#xff1a;画出对象的引用和依赖模型…

强缓存与协商缓存、缓存失效的问题、缓存nginx配置、缓存存在哪里

前端缓存&#xff0c;这是一个老生常谈的话题&#xff0c;也常被作为前端面试的一个知识点。今天我们来总结一下。 分类&#xff1a;前端缓存分为强缓存和协商缓存两种。 强缓存 强缓存主要使用 Expires、Cache-Control 两个头字段&#xff0c;两者同时存在 Cache-Control 优…