【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://xiahunao.cn/news/3267063.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

四、单线程多路IO复用+多线程业务工作池

文章目录 一、前言1 编译方法 二、单线程多路IO复用多线程业务工作池结构三、重写Client_Context类四、编写Server类 一、前言 我们以及讲完单线程多路IO复用 以及任务调度与执行的C线程池&#xff0c;接下来我们就给他结合起来。 由于项目变大&#xff0c;尝试解耦项目&#…

谷粒商城实战笔记-66-商品服务-API-品牌管理-JSR303数据校验

文章目录 一&#xff0c;引入JSR 303依赖二&#xff0c;接口参数启用校验功能三&#xff0c;给字段添加校验注解NotBlank 和 NotNull 的区别NotBlankNotNull比较 四&#xff0c;BindingResult获取校验结果五&#xff0c;自定义错误消息六&#xff0c;其他校验规则 在Web应用程序…

【AIGC】构建自己的谷歌搜索引擎服务并使用

一、谷歌 谷歌的搜索引擎需要自己创建服务才能启用检索api。&#xff08;需自行翻墙和创建自己的谷歌账号&#xff09; 1.1 API服务创建 1&#xff09;登陆https://console.cloud.google.com/: 2&#xff09; 选择新建项目&#xff0c;取号项目名即可&#xff08;比如:Olin…

【Java】/* 异常 */

目录 ​编辑 一、错误和异常的体系 二、异常 2.1 异常的分类 2.2 异常的处理形式 2.3 如何抛出异常 2.4 捕获处理异常 2.5 finally存在的意义 2.6 异常处理流程总结 2.7 自定义异常类 一、错误和异常的体系 1. Java中所有的异常和错误都有对应的类来进行描述。 2. 由…

【日常记录】【JS】JS中查询参数处理工具URLSearchParams

文章目录 1. 引言2. URLSearchParams2.1 URLSearchParams 的构造函数2.2 append() 方法2.3 delete() 方法2.4 entries() 方法2.5 forEach() 方法2.6 get() 方法2.7 getAll() 方法2.8 has() 方法2.9 keys() 方法2.10 set() 方法2.11 toString() 方法2.12 values() 方法 参考链接…

Protobuf序列化原理学习

Protobuf 序列化原理学习 1. 基本概念 消息&#xff1a;由于Protocp Buffer主要用于数据存储、网络通信的场景&#xff0c;将结构化的数据&#xff08;数据结构或对象&#xff09;进行序列化&#xff0c;生成二进制串来保存或传输。把要序列化的结构化数据称为**消息**。 T -…

Activiti学习之入门个人任务(07)

这里写目录标题 一、分配任务负责人1.1 固定分配1.2 表达式分配1.2.1 UEL表达式1.2.2 使用流程变量分配任务1.2.3 注意事项 1.3 监听器分配 二、查询任务2.1 查询负责人待办2.2 关联businessKey 三、办理任务 一、分配任务负责人 1.1 固定分配 在进行业务流程建模时指定固定的…

vdb:虚拟数据库

将文件虚拟成数据库&#xff0c;序列化写入、反序列化读取、直接读取。

离散型制造业中,MES系统的应用场景

在离散型制造业中&#xff0c;MES&#xff08;制造执行系统&#xff09;系统的应用场景极为丰富且关键&#xff0c;它贯穿于整个生产过程的各个环节&#xff0c;从生产计划到生产执行&#xff0c;再到质量控制和物料管理&#xff0c;都发挥着不可替代的作用。以下是离散制造业中…

本地化部署一个简单的AI大模型,Llama3.1

7 月 23 日消息&#xff0c;Meta 今晚正式发布llama3.1&#xff0c;提供 8B、70B 及 405B 参数版本。 Meta 称 4050 亿参数的 Llama 3.1-405B 在常识、可引导性、数学、工具使用和多语言翻译等一系列任务中&#xff0c;可与 GPT-4、GPT-4o、Claude 3.5 Sonnet 等领先的闭源模型…

收藏:高性价比https证书

在当今的数字化世界中&#xff0c;网络安全已经成为了每个网站所有者的首要关注点&#xff0c;为了保护网站的安全&#xff0c;防止数据被窃取或篡改&#xff0c;使用SSL证书已经成为了一种标准的做法&#xff0c;SSL证书是一种用于加密网站和用户之间数据传输的证书&#xff0…

[240726] Mistral AI 发布新一代旗舰模型 | Node.js 合并 TypeScript 文件执行提案

目录 Mistral AI 发布新一代旗舰模型&#xff1a;Mistral Large 2Node.js 合并 TypeScript 文件执行提案&#xff1a;--experimental-strip-types Mistral AI 发布新一代旗舰模型&#xff1a;Mistral Large 2 Mistral AI 宣布推出新一代旗舰模型 Mistral Large 2&#xff0c;该…

2024新版 黑马程序员《C++零基础入门》笔记——第一章19 cin中文乱码的解决

1.cin中文乱码的解决 2.代码实践 # include "iostream" # include "windows.h" using namespace std;int main() {SetConsoleOutputCP(CP_UTF8);string str;cin >> str;cout << str << endl;return 0; } 注意&#xff0c;勾选之后以后也…

【echarts】中如何设置曲线展示最新值、最大值、最小值

需要用到的属性&#xff1a;图表标注 series-line. markPoint 默认可以通过 type直接标注&#xff1a;‘min’ 最小值、‘max’ 最大值、‘average’ 平均值。 markPoint: {data: [{type: max},{type: min}]}如何展示最新值 如果要展示最新值得话&#xff0c;需要设置 标注…

如何让C++程序自动生成dump文件?以及如何分析dump文件?

目录 1、API函数SetUnhandledExceptionFilter介绍 2、调用SetUnhandledExceptionFilter设置异常处理函数 3、调用MiniDumpWriteDump函数导出包含异常上下文的dump文件 4、dump文件的多种生成方式 5、使用Windbg分析dump文件 6、最后 C++软件异常排查从入门到精通系列教程…

数业智能心大陆:定制你的专属心理健康方案

在快速变化的社会中&#xff0c;随着人们对自我健康认识的不断加深&#xff0c;心理健康已成为影响生活质量的关键因素&#xff0c;许多成年人在其一生中会遇到心理健康问题。在探索人类心理奥秘的旅程中&#xff0c;我们发现&#xff0c;每个人的心理状态和需求都是独一无二的…

mmdetection训练后评估指标,验证Loss

项目场景&#xff1a; 对mmdetection框架下训练好的log.json文件进行评估。 问题描述 使用框架底下自带的评估文件&#xff0c;不能对loss进行评估。也就是文件&#xff1a;tools/analysis_tools/analyze_logs.py 解决方案&#xff1a; 自己做了评估loss的代码&#xff0c;目…

使用nginx解决本地环境访问线上接口跨域问题

前言 前端项目开发过程中&#xff0c;经常会遇到各种各样的跨域问题。 虽然大部分时候&#xff0c;由脚手架自带的proxy功能即可解决问题&#xff0c;如webpack&#xff0c;vite等&#xff1b;但是若没有通过脚手架搭建项目&#xff0c;或者必须使用某些特殊规则转发时&#…

C语言常见字符函数和字符串函数精讲

目录 引言 一、字符函数 1.字符分类函数 2.字符转换函数 二、字符串函数 1.gets、puts 2.strlen 3.strcpy 4.strncpy 5.strcat 6.strncat 7.strcmp 8.strncmp 9.strstr 10.strchr 11.strtok 12.strlwr 13.strupr 引言 在C语言编程中&#xff0c;字符函数…

Python小工具——监听某网站的数据变化并进行邮件通知

目录 一、需求描述 二、解析 三、实例代码 一、需求描述 监听自考网2024年广东省6月份的毕业生学历注册进度&#xff0c;这是网址&#xff1a;https://www.chsi.com.cn/xlcx/count_zk.jsp&#xff0c; 如上图所示&#xff0c;我们想知道这个红色的空格啥时候被填满&#xf…