QT---使用json类读写json对象
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/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;
}
最后,觉得本文内容对你有所帮助的话,希望能点赞收藏,你的鼓励是对我最大的支持!
GitHub 加速计划 / js / json
18
5
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:3 个月前 )
2d42229f
* Support BSON uint64 de/serialization
Signed-off-by: Michael Valladolid <mikevalladolid@gmail.com>
* Treat 0x11 as uint64 and not timestamp specific
Signed-off-by: Michael Valladolid <mikevalladolid@gmail.com>
---------
Signed-off-by: Michael Valladolid <mikevalladolid@gmail.com> 4 天前
1809b3d8
Signed-off-by: Niels Lohmann <mail@nlohmann.me> 4 天前
更多推荐
已为社区贡献10条内容
所有评论(0)