程序运行截图如下:

文件如下:

源码如下:

#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QFile>
#include <QDebug>
#include <QVector>class Student{
public:int id;QString name;void write(QJsonObject &json) const{json["id"] = id;json["name"] = name;}void read(const QJsonObject &json){if (json.contains("id") && json["id"].isDouble())id = json["id"].toInt();if (json.contains("name") && json["name"].isString())name = json["name"].toString();}friend QDebug operator << (QDebug os, Student stu){os << "(" << stu.id << ", "<< stu.name << ")";return os;}};class MyClass{
public:int id;QVector<Student> students;void read(const QJsonObject &json){if(json.contains("id") && json["id"].isDouble())id = json["id"].toInt();if(json.contains("students") && json["students"].isArray()){QJsonArray array = json["students"].toArray();for(int i = 0; i < array.size(); i++){QJsonObject obj = array[i].toObject();Student student;student.read(obj);this->students.append(student);}}}void write(QJsonObject &json) const{json["id"] = id;QJsonArray array;for(int i = 0; i < students.size(); i++){QJsonObject student;students.at(i).write(student);array.append(student);}json["students"] = array;}friend QDebug operator << (QDebug os, MyClass myClass){os << "(" << endl << myClass.id << ", ";for(int i = 0; i < myClass.students.size(); i++){os << myClass.students.at(i);}os << endl << ")";return os;}
};int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);Student s0;s0.id = 1000;s0.name = "朱小明";Student s1;s1.id = 1001;s1.name = "闰土";Student s2;s2.id = 1000;s2.name = "锅盖";Student s3;s3.id = 1003;s3.name = "王炸";MyClass myClass;myClass.id = 142203;myClass.students.append(s0);myClass.students.append(s1);myClass.students.append(s2);myClass.students.append(s3);QJsonObject json;myClass.write(json);QJsonDocument saveJson(json);QFile saveJsonFile("save.json");QFile saveBinaryFile("save.dat");if(!saveJsonFile.open(QIODevice::ReadWrite)){qDebug() << "open failed";return 0;}if(!saveBinaryFile.open(QIODevice::ReadWrite)){qDebug() << "open failed";return 0;}saveJsonFile.write(saveJson.toJson());saveJsonFile.close();saveBinaryFile.write(saveJson.toBinaryData());saveBinaryFile.close();qDebug() << "write over";QFile loadFile("save.dat");if(!loadFile.open(QIODevice::ReadOnly)){qDebug() << "open failed";}QByteArray data = loadFile.readAll();QJsonDocument loadDoc(QJsonDocument::fromBinaryData(data));MyClass readClass;readClass.read(loadDoc.object());loadFile.close();qDebug() << "read over";qDebug() << readClass;return a.exec();
}

Qt笔记-Qt中Json存二进制文件并读取文件(QJsonObject、QJsonArray、QJsonDocument的使用)相关推荐

  1. QT学习:使用JSON/XML等非ts文件实现多语言国际化

    注意:如果不是CSDN网站显示本篇文章,请于底部点击"阅读原文"来阅读本篇文章! QT学习:使用JSON/XML等非ts文件实现多语言国际化 解析Json 重载translate ...

  2. spark 读取ftp_scala – 使用ftp在Apache Spark中的远程计算机上读取文件

    我正在尝试使用ftp在Apache Spark( Scala版本)中的远程计算机上读取文件.目前,我在 GitHub上关注Databricks的Learning Spark回购中的一个例子.使用cur ...

  3. Node中同步与异步的方式读取文件

    场景 Node.js最大的特点就是异步式I/O(或者非阻塞I/O)与事件紧密结合的编程模式.这种模式与传统的同步式I/O线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一个逻 ...

  4. 在EXCEL中通过VBA实现批量读取文件夹内的文件名称

    需求:有时候需要批量读取某个文件夹中的文件名称,有的程序只能读取同类型的,当文件为不同类型时就无法读取,因此需要写一个VBA程序,实现批量读取同一文件夹内的所有文件名称,且不需要修改程序就可以自由选择 ...

  5. java中相对路径怎么写_java中如何使用相对路径读取文件

    java中使用相对路径读取文件的方法:1.使用文件[File file = new File("src/test.txt")]方法:2.使用类的相对路径:3.使用当前线程的类加载器 ...

  6. Qt笔记-profile中基本配置(获取环境变量、设置生成路径、包含文件)

    配置好环境变量后通过在profile文件中通过$$(xxx)进行获取. 通过DESTDIR配置生成目标文件的路径. 使用INCLUDEPATH包含文件.如下: QT += guiINCLUDEPATH ...

  7. Qt笔记-Q3DScatter中元素的移动和旋转

    程序运行截图如下: 这里的主要框架为Q3DScatter 首先是设置范围,免得随机生成坐标时,坐标系不停的变: 使用QScatter3DSeries生成一串的item.方便显示在m_graph中 使用 ...

  8. Qt笔记-Qt获取百度下拉推荐词

    目录 基本概念 代码与实例 基本概念 这里就是百度搜索的这个功能 在Web应用中,这种主要是通过jsonp原理实现的,但在桌面应用程序就更简单了,只要发送get请求,不填写回调函数,即可在http封包 ...

  9. QT笔记——QT支持Https

    我们想要实现支持https的请求,在一开始,不做任何操作下,是不支持https的请求的 我的环境:vs2019 + qt 5.12.2 其他版本可能不清楚 什么是https:是由SSL + HTTP协 ...

最新文章

  1. 使用 VideoToolbox 探索低延迟视频编码 | WWDC 演讲实录
  2. ubuntu php 无法执行exec_利用webhook使php项目自动部署
  3. 《单线程的build hash table、write rows to chunks、hash join的步骤以及流程图》
  4. SqlServer自定义聚合函数
  5. Selenium 显式等待条件及其含义
  6. 最常用的15个前端表单验证JS正则表达式
  7. MySQL主从、主主、半同步节点架构的的原理及实验总结
  8. 国内专业移动广告聚合平台,KeyMob,手机广告效果最棒
  9. bioconductor 安装包_R语言 | 你知道自己的Bioconductor版本么?
  10. HEVC码率控制介绍(R-Lamda)
  11. STC51几种简单的延时函数
  12. java有没有友元函数_c++中友元函数理解与使用
  13. python学习笔记(五):装饰器、生成器、内置函数、json
  14. MacOS:Shell工具-Royal TSX
  15. 高通9008固件下载备份工具
  16. [C++] 将 mp3 等音乐资源以资源形式嵌入 exe 文件中
  17. 不同的count用法
  18. java map 空指针异常_Java8使用Collectors toMap,当value为null时报空指针异常
  19. 基于深度摄像头的障碍物检测(realsense+opencv)
  20. MySQL的upsert

热门文章

  1. 网络无人值守安装linux----kickstart
  2. 打印机共享无法正常打印的处理思路
  3. Js中Date的应用
  4. IT管理人才必备的十大能力(转)
  5. 关于编程学习及面试,推荐些适合的网站,希望对现在的你有帮助!
  6. 【飞秋教程】查找/备份/还原
  7. 进行api的HTML5inlinehook操作(飞秋官方下载)
  8. 这几天整理的 飞秋官方下载
  9. 多看看飞鸽传书等系统级的源代码
  10. 和大家探讨一下“虚拟光驱”原理