当前位置: 首页 > news >正文

【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();
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【传知代码】智慧医疗:纹理特征VS卷积特征(论文复现)
  • 计算机网络 6.1Internet概念
  • STM32 裸机 LWIP RAW接口 TCP客户端和服务端,以及UDP收发实现
  • Binius-based zkVM:为Polygon AggLayer开发、FPGA加速的zkVM
  • python机器学习8--网络
  • 【React】JSX 实现列表渲染
  • Linux进程控制——进程等待
  • WEB前端12-axios基础
  • SQL labs-SQL注入(四,sqlmap对于post传参方式的注入)
  • Java Web应用安全防护
  • 03--KVM虚拟化
  • Python 爬虫入门(一):从零开始学爬虫 「详细介绍」
  • ES里面常用的查询语句有哪些?
  • Pytorch使用教学2-Tensor的维度
  • 探索Python的进度条神器:tqdm
  • 78. Subsets
  • Android开源项目规范总结
  • CEF与代理
  • HashMap ConcurrentHashMap
  • Intervention/image 图片处理扩展包的安装和使用
  • Java程序员幽默爆笑锦集
  • js ES6 求数组的交集,并集,还有差集
  • magento 货币换算
  • PhantomJS 安装
  • Redash本地开发环境搭建
  • spring security oauth2 password授权模式
  • 翻译--Thinking in React
  • 看域名解析域名安全对SEO的影响
  • 排序算法学习笔记
  • Linux权限管理(week1_day5)--技术流ken
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 阿里云服务器购买完整流程
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #pragma once
  • #VERDI# 关于如何查看FSM状态机的方法
  • #window11设置系统变量#
  • #传输# #传输数据判断#
  • #微信小程序:微信小程序常见的配置传值
  • #职场发展#其他
  • $.ajax()参数及用法
  • (02)vite环境变量配置
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (八)Flink Join 连接
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (六)DockerCompose安装与配置
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四)库存超卖案例实战——优化redis分布式锁
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (译)2019年前端性能优化清单 — 下篇
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载