【Qt 】JSON 数据格式详解

文章目录

      • 1. JSON 有什么作用?
      • 2. JSON 的特点
      • 3. JSON 的两种数据格式
        • 3.1 JSON 数组
        • 3.2 JSON 对象
      • 4. Qt 中如何使用 JSON 呢?
        • 4.1 QJsonObject
        • 4.2 QJsonArray
        • 4.3 QJsonValue
        • 4.4 QJsonDocument
      • 5. 构建 JSON 字符串
      • 6. 解析 JSON 字符串

1. JSON 有什么作用?

  • 🐧① JSON 即为 JS对象表示法(因为它和 JS中对象的写法很相似),与JavaScript是没啥关系的;

  • 🐧② JSON 本质是一种特殊格式的字符串;

  • 🐧③ JSON 是一种轻量级的数据交互格式,客户端和服务端数据交互,基本都是JSON格式;


2. JSON 的特点

  • ① 便于阅读和书写
    JSON外,还有一种数据交互的格式 XML,但是JSON更便于书写和阅读

  • ② 独立于编程语言,几乎所有的编程语言和开发环境中,都有生成和解析 JSON字符串的库
    在这里插入图片描述

  • ③ 网络传输的标准数据格式


3. JSON 的两种数据格式

  • JSON有两种数据格式:
    JSON 对象,被 { }包裹
    JSON 数组,被 [] 包裹
3.1 JSON 数组
  • JSON 数组中可以放置任意的类型,可以在数组中放置 JSON对象,JSON数组
    在这里插入图片描述
3.2 JSON 对象
  • 🍎 JSON 对象是键值对的形式,键的类型是字符串,值的类型可以为数组对象整形浮点型

在这里插入图片描述

在这里插入图片描述


4. Qt 中如何使用 JSON 呢?

4.1 QJsonObject

在这里插入图片描述

在这里插入图片描述


4.2 QJsonArray

在这里插入图片描述
在这里插入图片描述


4.3 QJsonValue

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


4.4 QJsonDocument

在这里插入图片描述
在这里插入图片描述


5. 构建 JSON 字符串

#include <QCoreApplication>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>#include <QDebug>
#include <QFile>void writeJson()
{QJsonObject rootQJsonObject;// 插入 name 字段rootQJsonObject.insert("name", "China");// 插入 info 字段QJsonObject infoQJsonObject;infoQJsonObject.insert("capital", "beijing");infoQJsonObject.insert("asian", true);infoQJsonObject.insert("founded", "1949");rootQJsonObject.insert("info", infoQJsonObject);// 插入 provinces 字段QJsonArray provincesArray;QJsonObject sdProvincesQJsonObject;sdProvincesQJsonObject.insert("name", "shangdong");sdProvincesQJsonObject.insert("capital", "jinan");QJsonObject zjProvincesQJsonObject;zjProvincesQJsonObject.insert("name", "zhejiang");zjProvincesQJsonObject.insert("capital", "hangzhou");provincesArray.append(sdProvincesQJsonObject);provincesArray.append(zjProvincesQJsonObject);rootQJsonObject.insert("provinces", provincesArray);// 把 json 对象转换成为 字符串QJsonDocument doc(rootQJsonObject);QByteArray json = doc.toJson();// 打印输出qDebug() << QString(json).toUtf8().data();// 将 json 字符串写入到文件QFile file("d:\\china.json");file.open(QFile::WriteOnly);file.write(json);file.close();}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);writeJson();return a.exec();
}

6. 解析 JSON 字符串


#include <QCoreApplication>
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>#include <QDebug>void readJson()
{// 1. 读取文件QFile file("d:\\china.json");file.open(QFile::ReadOnly);QByteArray json = file.readAll();file.close();QJsonDocument doc = QJsonDocument::fromJson(json);if (!doc.isObject()) {qDebug() << " Not an object";return;}QJsonObject obj = doc.object();QStringList keys = obj.keys();for (int i = 0; i < keys.size(); i ++){// 获取 key - valueQString key = keys[i];QJsonValue value = obj.value(key);if (value.isBool()){qDebug() << "key : " << key << "  value : " << value.toBool();} else if (value.isDouble()) {qDebug() << "key : " << key << "  value : " << value.toDouble();} else if (value.isString()) {qDebug() << "key : " << key << "  value : " << value.toString();} else if (value.isObject()) {qDebug() << key << ":";QJsonObject infoObject = value.toObject();QString capital = infoObject["capital"].toString();bool asian = infoObject["asian"].toBool();QString founded = infoObject["founded"].toString();qDebug() << "capital : " << capital;qDebug() << "asian : " << asian;qDebug() << "founded" << founded;} else if (value.isArray()){QJsonArray provincesArray = value.toArray();for (int i = 0; i < provincesArray.size(); i ++){QJsonObject sdJsonObject = provincesArray[i].toObject();qDebug() <<"name:  " << sdJsonObject["name"].toString();qDebug() <<"capital:  " << sdJsonObject["capital"].toString();}}}
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);readJson();return a.exec();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1、hadoop环境搭建

1、环境配置 ip(/etc/sysconfig/network-scripts) # 网卡1 DEVICEeht0 TYPEEthernet ONBOOTyes NM_CONTROLLEDyes BOOTPROTOstatic IPADDR192.168.59.11 GATEWAY192.168.59.1 NETMASK 255.255.255.0 # 网卡2 DEVICEeht0 TYPEEthernet ONBOOTyes NM_CONTROLLEDyes BOOTPROTOdh…

算法通关:006_3二分查找:查找数组中<=num 最右边的值

文章目录 说明主要代码全部代码运行结果 说明 大于等于最右不考&#xff0c;意义不大。 直接看&#xff08;arr.length-1&#xff09; 位&#xff08;即数组最后一位&#xff09;&#xff0c;如果大于num&#xff0c;那就说明arr[arr.length-1]是大于等于最右的数字数组最后一…

Redux +Toolkit 工具包快速入门

您将学到什么 如何设置并使用 Redux Toolkit 和 React-Redux 先决条件 熟悉ES6 语法和功能了解 React 术语&#xff1a;JSX、State、Function Components 、 Props和Hooks理解Redux 术语和概念 1、基本使用 1.1、安装 Redux Toolkit 和 React- Redux 将 Redux Toolkit 和 Rea…

学习C语言第十四天(指针练习)

1.第一题C 2.第二题C 3.第三题 00345 short类型解引用一次访问两个字节 4.第四题 6&#xff0c;12 5.第五题C 6.第六题 下面代码结果是0x11223300 7.第七题 int main() {int a 0;int n 0;scanf("%d %d",&a,&n);int i 0;int k 0;int sum 0;for (i 0;…

sklearn聚类算法用于图片压缩与图片颜色直方图分类

上期文章:机器学习之SKlearn(scikit-learn)的K-means聚类算法 我们分享了sklearn的基本知识与基本的聚类算法,这里主要是机器学习的算法思想,前期文章我们也分享过人工智能的深度学习,二者有如何区别,可以先参考如下几个实例来看看机器学习是如何操作的 不同K值下的聚…

算法解决海量数据的 topK

目录 设计算法解决海量数据的 topK 问题如何统计不同电话号码的个数&#xff1f;题目描述解答思路与实现步骤注意点 如何在大量的数据中判断一个数是否存在&#xff1f;题目描述解决方案具体步骤优化与注意事项 如何从大量的 URL 中找出相同的 URL&#xff1f;题目描述解答思路…

系统架构设计师教程 第4章 信息安全技术基础知识-4.5 密钥管理技术4.6 访问控制及数字签名技术-解读

系统架构设计师教程 第4章 信息安全技术基础知识-4.5 密钥管理技术&4.6 访问控制及数字签名技术 4.5 密钥管理技术4.5.1 对称密钥的分配与管理4.5.1.1 密钥的使用控制4.5.1.1.1 密钥标签4.5.1.1.2 控制矢量4.5.1.2 密钥的分配4.5.1.2.1物理方式14.5.1.2.2 物理方式24.5.1…

【多线程】定时器

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 定时器是什么&#xff1f;2. 定时器的应用场景3. Timer类的使用3.1 Timer类创建定时器3.2 schedule()方法…

C语言——结构体(struct)对齐

目录 前言 一、结构体对齐规则 1、结构体的总大小对齐规则 2、结构体成员的对齐规则 3、数组和结构体的对齐规则 二、改变编译器对齐数&#xff08;#pragma pack&#xff09; 三、如何减小结构体占用内存 1、 重新排列成员顺序 2、使用#pragma pack指令 3、使用位域 4、其他 总…

使用sheetjs导出CSV文本为excel

使用SheetJS&#xff08;也称为xlsx库&#xff09;导出CSV文本为Excel文件&#xff0c;你可以先将CSV文本解析为SheetJS支持的工作表格式&#xff0c;然后再将其写入为一个新的Excel文件。以下是一个简单的示例代码&#xff1a; const XLSX require(xlsx); const fs requir…

.net core 8.0 新建的项目无法使用 IApplicationBuilder

1、在项目文件中添加 <ItemGroup><FrameworkReference Include"Microsoft.AspNetCore.App" /> </ItemGroup> 2、在使用的地方添加 using Microsoft.AspNetCore.Builder;

工作流 Flowable

工作流包括业务流和审批流等业务流程。 在一个流程系统中&#xff0c;任务间往往存在复杂的依赖关系&#xff0c;为保证pipeline的正确执行&#xff0c;就是要解决各任务间依赖的问题&#xff0c;这样DAG结合拓扑排序是解决存在依赖关系的一类问题的利器。DAG ( Directed Acyc…

池化层pytorch最大池化练习

神经网络构建 class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.maxpool1 MaxPool2d(kernel_size3, ceil_modeFalse)def forward(self, input):output self.maxpool1(input)return output Tensorboard 处理 writer SummaryWriter("./l…

【React】详解如何获取 DOM 元素

文章目录 一、基础概念1. 什么是DOM&#xff1f;2. 为什么需要获取DOM&#xff1f; 二、使用 ref 获取DOM元素1. 基本概念2. 类组件中的 ref3. 函数组件中的 ref 三、 ref 的进阶用法1. 动态设置 ref2. ref 与函数组件的结合 四、处理特殊情况1. 多个 ref 的处理2. ref 与条件渲…

基于STM32F103的FreeRTOS系列(四)·FreeRTOS资料获取以及简介

目录 1. FreeRTOS简介 1.1 FreeRTOS介绍 1.2 为何选择FreeRTOS 1.3 FreeRTOS资料获取 1.3.1 官网下载 1.3.2 Github下载 1.3.3 托管网站下载 1.4 FreeRTOS的编程风格 1.4.1 数据类型 1.4.2 变量名 1.4.3 函数名 1.4.4 宏 1. FreeRTOS简介 1.1 Free…

11. Hibernate 持久化对象的各种状态

1. 前言 本节课和大家聊聊持久化对象的 3 种状态。通过本节课程&#xff0c;你将了解到&#xff1a; 持久化对象的 3 种状态&#xff1b;什么是对象持久化能力。 2. 持久化对象的状态 程序运行期间的数据都是存储在内存中。内存具有临时性。程序结束、计算机挂机…… 内存中…

前端开发大屏适配几种方案

方案一&#xff1a;vw&#xff08;单位&#xff09; 假设设计稿尺寸为 1920*1080&#xff0c;直接使用 vw 单位&#xff0c;屏幕的宽默认为 100vw&#xff0c;那么100vw 1920px&#xff0c; 1vw 19.2px 。 新建px2vw.scss / 使用 scss 的 math 函数 use "sass:math&q…

Web前端浅谈ArkTS组件开发

本文由JS老狗原创。 有幸参与本厂APP的鸿蒙化改造&#xff0c;学习了ArkTS以及IDE的相关知识&#xff0c;并有机会在ISSUE上与鸿蒙各路大佬交流&#xff0c;获益颇丰。 本篇文章将从一个Web前端的视角出发&#xff0c;浅谈ArkTS组件开发的基础问题&#xff0c;比如属性传递、插…

hamcrest 断言框架使用示例和优势分析

引言 在软件测试领域&#xff0c;断言是验证代码行为是否符合预期的关键环节。Hamcrest 断言框架&#xff0c;以其独特的匹配器&#xff08;Matcher&#xff09;概念和清晰的失败信息&#xff0c;赢得了广泛的赞誉。尽管 Python 标准库中没有内置的 Hamcrest 库&#xff0c;但…

【Linux】-----工具篇(编译器gcc/g++,调试器gdb)

目录 一、gcc/g 简单认识 程序的翻译过程认识gcc 预处理(宏替换) 编译 汇编 链接 宏观认识 如何理解&#xff08;核心&#xff09; 什么是链接&#xff1f; 链接的分类 二、gdb 基本的认识 基本操作及指令 安装gdb 启动gdb ​编辑 显示源代码(list) 运行程序…