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;
}



最后,觉得本文内容对你有所帮助的话,希望能点赞收藏,你的鼓励是对我最大的支持!

猜你喜欢

转载自blog.csdn.net/qq_40077565/article/details/121430636