转自:     

 

一、写入:

介绍使用Qt读写JSON文件。如果你对JSON不是很了解,请阅读我之前的一篇文章json简介
使用的开发环境为:

Qt 5.12.0+Deepin 15.8

在Qt中与JSON相关的类有以下几个,Q=QJsonDocument,QJsonArray,QJsonObject,QJsonParseError,QJsonValue。

 
QT中json读写

 

 

json

其中QJsonDocument类提供了读写JSON文档的方式,我们可以通过该类的方法QJsonDocument::fromJson()将一个JSON文档转换成QJsonDocument类,或者通过QJsonDocument::toJson()和QJsonDocument::toBinaryData()函数将一个QJsonDocument类转换为QByteArray,这样我们就可以很轻松地将其写入文件。

QJsonArray封装了JSON中的数组。
QJsonObject封装了JSON中的对象。
QJsonValue封装了JSON中的值。
QJsonParseError 用于报告JSON解析中的错误类型。

使用QJsonObject简单演示

首先,我们使用Qt creator创建一个Qt Console Application项目,项目名称位置可随意。

 
QT中json读写

 

 

creator

修改main.cpp中的代码如下所示

 1 #include <QJsonArray>
 2 #include <QJsonDocument>
 3 #include <QJsonObject>
 4 #include <QJsonParseError>
 5 #include <QJsonValue>
 6 #include <QString>
 7 #include <QDebug>
 8 #include <QFile>
 9 #include <QDateTime>
10 #include <QDir>
11 
12 int main(int argc, char *argv[]) {
13 // 以读写方式打开主目录下的1.json文件,若该文件不存在则会自动创建
14     QFile file(QDir::homePath() + "/1.json");
15     if(!file.open(QIODevice::ReadWrite)) {
16         qDebug() << "File open error";
17     } else {
18         qDebug() <<"File open!";
19     }
20 // 使用QJsonObject对象插入键值对。
21     QJsonObject jsonObject;
22     jsonObject.insert("name", "tom");
23     jsonObject.insert("age", "18");
24     jsonObject.insert("time", QDateTime::currentDateTime().toString());
25 
26 // 使用QJsonDocument设置该json对象
27     QJsonDocument jsonDoc;
28     jsonDoc.setObject(jsonObject);
29 
30 // 将json以文本形式写入文件并关闭文件。
31     file.write(jsonDoc.toJson());
32     file.close();
33 
34     qDebug() << "Write to file";
35     return 0;
36 }
View Code

 

之后打开你的终端(linux环境下), 会看到我们的程序在主目录下生成了一个1.json的文件。然后查看下里面的内容。

 
QT中json读写

 

 

json file

不知道你有没有注意到,我们在jsonObject中插入键值对的顺序和文件中的键值对顺序不太一样,这是因为JSON中的object本身是指无序的键值对,它不能确保我们插入的顺序和实际保存的数据顺序一致。如果你的数据需要顺序一致,考虑JSON中的array,array是值的有序列表。

 
QT中json读写

 

 

code

简单使用QJsonArray

修改main.cpp中的代码如下,注:该代码会清空主目录先1.json的原有内容,如果你想保留原有的文件内容,请备份或者修改写入的文件名。

 1 #include <QJsonArray>
 2 #include <QJsonDocument>
 3 #include <QJsonObject>
 4 #include <QJsonParseError>
 5 #include <QJsonValue>
 6 #include <QString>
 7 #include <QDebug>
 8 #include <QFile>
 9 #include <QDateTime>
10 #include <QDir>
11 
12 int main(int argc, char *argv[]) {
13     // 以读写方式打开主目录下的1.json文件,若该文件不存在则会自动创建
14     QFile file(QDir::homePath() + "/1.json");
15     if(!file.open(QIODevice::ReadWrite)) {
16         qDebug() << "File open error";
17     } else {
18         qDebug() <<"File open!";
19     }
20 
21     // 清空文件中的原有内容
22     file.resize(0);
23 
24     // 使用QJsonArray添加值,并写入文件
25     QJsonArray jsonArray;
26     jsonArray.append("name");
27     jsonArray.append(18);
28     jsonArray.append(QDateTime::currentDateTime().toString());
29 
30     QJsonDocument jsonDoc;
31     jsonDoc.setArray(jsonArray);
32 
33     file.write(jsonDoc.toJson());
34     file.close();
35 
36     qDebug() << "Write to file";
37     return 0;
38 }
View Code

 

这次文件中的数据顺序,和我们扩展JSON数组中的顺序是一致的。


 
QT中json读写

 

 

jsonArray

稍微复杂的例子

我们注意到JSON中的值可以是字符串、数组、对象、数字等,因此我们试试结合使用一下。

 1 #include <QJsonArray>
 2 #include <QJsonDocument>
 3 #include <QJsonObject>
 4 #include <QJsonParseError>
 5 #include <QJsonValue>
 6 #include <QString>
 7 #include <QDebug>
 8 #include <QFile>
 9 #include <QDateTime>
10 #include <QDir>
11 #include <QThread>
12 
13 int main(int argc, char *argv[]) {
14     // 以读写方式打开主目录下的1.json文件,若该文件不存在则会自动创建
15     QFile file(QDir::homePath() + "/1.json");
16     if(!file.open(QIODevice::ReadWrite)) {
17         qDebug() << "File open error";
18     } else {
19         qDebug() <<"File open!";
20     }
21 
22     // 清空文件中的原有内容
23     file.resize(0);
24 
25     // 使用QJsonArray添加值,并写入文件
26     QJsonArray jsonArray;
27 
28     for(int i = 0; i < 3; i++) {
29         QJsonObject jsonObject;
30         jsonObject.insert("name", QString::number(i+1));
31         jsonObject.insert("age", i+18);
32         jsonObject.insert("time", QDateTime::currentDateTime().toString());
33         jsonArray.append(jsonObject);
34         QThread::sleep(2);
35     }
36 
37     QJsonObject jsonObject;
38     jsonObject.insert("number", jsonArray.size());
39     jsonArray.append(jsonObject);
40 
41     QJsonDocument jsonDoc;
42     jsonDoc.setArray(jsonArray);
43 
44     file.write(jsonDoc.toJson());
45     file.close();
46 
47     qDebug() << "Write to file";
48     return 0;
49 }
View Code

 

相关文章:

  • 2021-12-27
  • 2022-12-23
  • 2021-11-12
  • 2022-12-23
  • 2021-11-12
  • 2022-12-23
  • 2022-12-23
  • 2021-11-24
猜你喜欢
  • 2021-06-30
  • 2022-12-23
  • 2022-12-23
  • 2021-09-27
  • 2022-12-23
  • 2021-04-21
  • 2021-09-01
相关资源
相似解决方案