QT---使用json类读写json对象
·
前言
在QT开发中,涉及到网络方面的知识,往往离不开JSON,JSON 格式是文本,它能够轻松地在服务器浏览器之间传输,并用作任何编程语言的数据格式。
下面,我们给出了一个小的demo,用来巩固其在QT中的应用。
Part1: 使用json类写json对象
问题- - - 如何创建JSON对象,并将JSON对象中所包含的数据保存到本地?
以图1为例,我们将一步一步演示这个过程:
| 图1 |
|---|
解决方法
- 第一步(创建工程)

| 图2 |
|---|

| 图3 |
|---|
- 第二步(代码实现)
- 先引入四个头文件(头文件的作用已给出对应注释)
#include<QJsonDocument> // 提供了一种读写JSON文档的方法
#include<QJsonObject> // 封装了一个JSON对象
#include<QJsonValue> // 表示json格式中的一个值
#include<QFile> // 用于文件操作

| 图4 |
|---|
- 第三步 (创建图1中的JSON对象)
//创建json对象
QJsonObject obj;
//创建子对象,待会要插入到obj中
QJsonObject sub;
//往对象中插入数据---使用insert("key",QJsonValue(" "))函数
sub.insert("IP",QJsonValue("192.168.1.1")); //写代码的时候忘记用127.0.0.1,不过问题不大,都一样
sub.insert("Port",QJsonValue("80"));
//将子对象插入到父对象中
obj.insert("Server",QJsonValue(sub));

| 图5 |
|---|
- 第四步(将json信息保存到本地的文件中)
//将内存中的json数据写入到QJsonDocument对象中
QJsonDocument doc(obj);
//将QJsonDocument对象转换成字符串
QByteArray data=doc.toJson();
// 将字符串写入本地文件,如果没有这个文件则会新建一个
QFile file("D:\\data.json");
file.open(QIODevice::WriteOnly);
file.write(data);
file.close();

| 图6 |
|---|
- 最后一步(检验效果)
- 由于我保存在了D盘,会发现D盘新生成了一个data.json文件,用Notepad++打开,会发现就是我们想要的数据!

| 图7 |
|---|
完整代码如下
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QJsonDocument> // 提供了一种读写JSON文档的方法
#include<QJsonObject> // 封装了一个JSON对象
#include<QJsonValue> // 表示json格式中的一个值
#include<QFile> // 用于文件操作
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建json对象
QJsonObject obj;
//创建子对象,待会要插入到obj中
QJsonObject sub;
//往对象中插入数据---使用insert("key",QJsonValue(" "))函数
sub.insert("IP",QJsonValue("192.168.1.1"));
sub.insert("Port",QJsonValue("80"));
//将子对象插入到父对象中
obj.insert("Server",QJsonValue(sub));
//将内存中的json数据写入到QJsonDocument对象中
QJsonDocument doc(obj);
//将QJsonDocument对象转换成字符串
QByteArray data=doc.toJson();
// 将字符串写入本地文件,如果没有这个文件则会新建一个
QFile file("D:\\data.json");
file.open(QIODevice::WriteOnly);
file.write(data);
file.close();
}
MainWindow::~MainWindow()
{
delete ui;
}
Part2: 使用json类读json对象
如Part1所示,我们已经将JSON对象保存在本地,那么如果我们要读取的话,应该如何操作呢?这里就不细讲了,所有注释都在图中,相应代码也在后面给出了。
| 图8 |
|---|
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QJsonDocument> // 提供了一种读写JSON文档的方法
#include<QJsonObject> // 封装了一个JSON对象
#include<QJsonValue> // 表示json格式中的一个值
#include<QFile> // 用于文件操作
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//读json文件
QFile file("D:\\data.json");
file.open(QIODevice::ReadOnly);
QByteArray data = file.readAll();
file.close();
//使用json文档对象加载json字符串
QJsonDocument doc = QJsonDocument::fromJson(data);
//判断是数组还是对象 (这里就不演示是数组的情况了)
if(doc.isObject())
{
QJsonObject obj = doc.object();
QJsonValue value = obj.value("Server");
if(value.isObject())
{
QJsonObject subobj = value.toObject();
//取值
QString IP = subobj.value("IP").toString();
QString Port = subobj.value("Port").toString();
//打印,验证结果
qDebug()<<IP<<Port;
}
}
}
MainWindow::~MainWindow()
{
delete ui;
}
最后,觉得本文内容对你有所帮助的话,希望能点赞收藏,你的鼓励是对我最大的支持!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)