IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> QT---使用json类读写json对象 -> 正文阅读

[大数据]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;
}



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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:27:52  更:2021-11-20 18:29:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:46:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码