Qt解析json格式数据

文章目录

  • json格式
    • 对象格式
    • 数组格式
  • QJsonDocument, QJsonObject,QJsonArray,QJsonValue
    • 例一:如何构建QJsonObject和QJsonDocument
    • 例二:解析前面的嵌套型json数据

json格式

对象格式

一个对象, 由一个大括号表示:
括号中 描述对象的属性:
通过键值对来描述对象的属性 (可以理解为, 大括号中, 包含的是一个个的键值对.)

{ "name":"小明", "info":"学生" 
}

数组格式

在JSON格式中可以与对象互相嵌套
[元素1,元素2…]

[{"dt": "20240417020000968"},{"ids": [{"dis": 608,"id": 131859}],"lv": 1,"nm": "C1"},{"ids": [{"dis": 0,"id": 131859}],"lv": 0,"nm": "C1-22"}
]

QJsonDocument, QJsonObject,QJsonArray,QJsonValue

QJsonDocument 类提供了一种读取和写入 JSON 文档的方法。
QJsonDocument 是一个包装完整 JSON 文档的类,可以从基于 UTF-8 编码的文本表示以及 Qt 自己的二进制格式读取和写入此文档。
可以使用 QJsonDocument::fromJson() 将 JSON 文档从其基于文本的表示形式转换为 QJsonDocument。toJson() 将其转换回文本。解析器非常快速和高效,并将JSON转换为Qt使用的二进制表示。
解析文档的有效性可以通过 !isNull() 查询
可以使用 isArray() 和 isObject() 查询文档是否包含数组或对象。可以使用 array() 或 object() 检索文档中包含的数组或对象,然后读取或操作。
也可以使用 fromBinaryData() 或 fromRawData() 从存储的二进制表示形式创建文档。

例一:如何构建QJsonObject和QJsonDocument

#include <QByteArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QDebug>int main()
{// 创建一个JSON对象QJsonObject object;object.insert("name", "John");object.insert("age", 30);// 将JSON对象转换为QJsonDocumentQJsonDocument document(object);// 将QJsonDocument转换为QByteArrayQByteArray data = document.toJson();// 输出QByteArrayqDebug() << data;// 将QByteArray转换为QJsonDocumentQJsonDocument newDocument = QJsonDocument::fromJson(data);// 将QJsonDocument转换为JSON对象QJsonObject newObject = newDocument.object();// 获取JSON对象中的值QString name = newObject.value("name").toString();int age = newObject.value("age").toInt();// 输出值qDebug() << "Name: " << name;qDebug() << "Age: " << age;return 0;
}

例二:解析前面的嵌套型json数据

int Widget::parseJsonData(QString name,QString strData)
{QString str =  "[{\"dt\":\"20240417020000968\"},{\"ids\":[{\"dis\":608,\"id\":131859}],\"lv\":1,\"nm\":\"C1\"},{\"ids\":[{\"dis\":0,\"id\":131859}],\"lv\":0,\"nm\":\"C1-22\"}]";QJsonDocument doc = QJsonDocument::fromJson(str.toUtf8());// 检查文档是否正确解析if (doc.isNull()){// qDebug() << "Failed to parse JSON";QMessageBox::warning(this,"warn",QStringLiteral("Failed to parse JSON"));return 0;}// 从文档中提取数组QJsonArray array = doc.array();// 遍历数组中的每个元素for (const QJsonValue &value : array){// 如果值是对象(对象是数组的成员)if (value.isObject()){QJsonObject obj = value.toObject();// 从对象中提取 "dt" 字段的值if (obj.contains("dt")){//qDebug() << "dt:" << obj["dt"].toString();}// 从对象中提取 "ids" 字段的值。注意 "ids" 是一个嵌套的数组if (obj.contains("ids")){QJsonArray idsArray = obj["ids"].toArray();for (const QJsonValue &subValue : idsArray){QJsonObject subObj = subValue.toObject();int dis = subObj["dis"].toInt();int id = subObj["id"].toInt();// qDebug() << "dis:" << dis << ", id:" << id;}}// 从对象中提取 "lv" 和 "nm" 字段的值if (obj.contains("lv") && obj.contains("nm")){// qDebug() << "lv:" << obj["lv"].toInt();//qDebug() << "nm:" << obj["nm"].toString();QString curname = obj["nm"].toString();int curValue = obj["lv"].toInt();if(curname == name ){return curValue;}}}}
}

文章参考链接这里

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

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

相关文章

【嵌入式开发】SecureCRTPortable工具进行串口信息监听打印

SecureCRTPortable工具进行串口信息监听打印 一、什么是SecureCRT二、如何使用SecureCRT进行串口监听1、硬件连接2、驱动安装3、软件连接4、串口连接5、日志设置 近期发现许多小伙伴欠缺SSH工具使用基础&#xff0c;工欲善其事&#xff0c;必先利其器&#xff0c;这里奉上使用教…

股票战法课程之主力的痕迹

文章目录 1. 主力的操作痕迹2. 主力的建仓2.1 建仓的三种方式2.2 建仓的五个特点2.3 建仓的迹象2.4 建仓的成交量特征 1. 主力的操作痕迹 序号痕迹原因1不跟随大盘节奏筹码都在主力手中2突发利空消息&#xff0c;股价不跌反涨主力被套&#xff0c;不希望散户抛盘3很小的成交量…

【Spring】Spring MVC入门

Spring MVC入门 一、什么是Spring Web MVC&#xff1f; 1.1 MVC定义 MVC是Model View Controller的缩写&#xff0c;是一种软件架构的设计模式&#xff0c;将软件系统分为模型、视图、控制器三个部分。 示意图如下: 可以看到&#xff0c;Controller作为一个“粘合剂”处于M…

Go 单元测试之mock接口测试

文章目录 一、gomock 工具介绍二、安装三、使用3.1 指定三个参数3.2 使用命令为接口生成 mock 实现3.3 使用make 命令封装处理mock 四、接口单元测试步骤三、小黄书Service层单元测试四、flags五、打桩&#xff08;stub&#xff09;参数 六、总结6.1 测试用例定义6.2 设计测试用…

linux环境下创建网口聚合实例

Linux的网口聚合&#xff08;网口绑定、bonding&#xff09;技术是一种通过多个网络接口聚合来提供网络冗余和/或增加网络带宽的方法&#xff0c;为提供网络稳定性、带宽、性能非常有利工具&#xff0c;常见的网口聚合可以支持不同工作模式 mode0 (balance-rr)&#xff1a;轮询…

详细分析Mysql常用函数(附Demo)

目录 前言1. 聚合函数2. 字符串函数3. 日期函数4. 条件函数5. 数值函数6. 类型转换函数 前言 由于实战中经常运用&#xff0c;索性来一个总结文 创建一个名为 employees 的表&#xff0c;包含以下字段&#xff1a; employee_id&#xff1a;员工ID&#xff0c;整数类型 first…

Linux的图形资源及指令

一、火车 1.切换到超级用户 su 2.下载资源 yum install -y sl 3.输入指令 sl&#xff0c;得到火车图形 如果没有得到该图形&#xff0c;就将2处改为yum install -y epel-release。 二、Linux的logo 1.在超级用户模式下下载资源 yum install -y linux_logo 2.输…

Eureka删除失效服务

方式一&#xff1a; curl -X DELETE http://主节点IP:1200/eureka/apps/LY-SM-BPM-EXPANSION-SVC/6dc2f49bca12:ly-sm-bpm-expansion-svc:6932 如果方式一过一会还会出现的话&#xff0c;采用 方式二&#xff1a; curl -X PUT http://主节点IP:1200/eureka/apps/LY-SM-BPM-…

物联网(iot)深度解析——FMEA软件

物联网即IoT&#xff0c;是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术&#xff0c;实时采集任何需要监控、连接、互动的物体或过程&#xff0c;采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息&#xff0c;通过…

C语言——字符函数与字符串函数

正文开始&#xff1a;在编程过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了方便操作字符和字符串&#xff0c;C语⾔标准库中提供了 一系列库函数&#xff0c;接下来我们就学习⼀下这些函数。 1. 字符分类函数 C语⾔中有⼀系列的函数是专门做字符分类的&#…

android远程更新下载apk

最近业务有涉及到&#xff0c;奈何是个app代码小白&#xff0c;遂记录一下 一&#xff1a;AndroidManifest.xml文件配置 application标签里面加上 android:networkSecurityConfig"xml/network_config" <!-- app下载更新配置--> <uses-permission andr…

【Qt 学习笔记】Qt常用控件 | 显示类控件Progress Bar的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 显示类控件Progress Bar的使用及说明 文章编号&#xff…

iOS NSFileManager获取设备硬盘剩余可用容量不准确问题

方法1. 通用 NSFileManager attributesOfFileSystemForPath: error: 方法2. available(iOS 11.0) NSURL resourceValuesForKeys: error: 发现问题&#xff1a;方法1获取到的剩余值并不准确&#xff0c;测得使用剩余值远小于实际的手机存储容量剩余。所以使用方法2优先。下面代…

网络防火墙技术知多少?了解如何保护您的网络安全

在当前以网络为核心的世界中&#xff0c;网络安全成为了至关重要的议题。网络防火墙是一种常见的保护网络安全的技术&#xff0c;用于监控和控制网络流量&#xff0c;阻止未经授权的访问和恶意活动。今天德迅云安全就带您了解下防火墙的一些相关功能和类型。 防火墙的五个功能…

完全卸载清理干净xcode

1、删除主磁盘的&#xff1a;资源库(Library)/ Preferences/com.apple.dt.Xcode.plist 2、删除用户下的&#xff1a;/Users/administrator/Library/Preferences/com.apple.dt.xcodebuild.plist 3、删除用户下的&#xff1a;/Users/administrator/Library/Preferences/com.app…

find和grep查找搜索命令常用的一些使用方式

目录 find和grep查找搜索命令常用的一些使用方式 一、find命令 二、grep命令 find和grep查找搜索命令常用的一些使用方式 一、find命令 我们知道在Windows系统中想要搜索查找文件&#xff0c;一般需要满足两个条件&#xff1a; 1、知道在哪些目录中查找 2、知道查找的内容&…

(助力国赛)数学建模可视化!!!含代码1(折线图、地图(点)、地图(线)、地图(多边形)、地图(密度)、环形图、环形柱状图、局部放大图)

众所周知&#xff0c;数学建模的过程中&#xff0c;将复杂的数据和模型结果通过可视化图形呈现出来&#xff0c;不仅能够帮助我们更深入地理解问题&#xff0c;还能够有效地向评委展示我们的研究成果。   今天&#xff0c;作者将与大家分享8种强大的数学建模可视化图形及其在…

.Net RabbitMQ(消息队列)

文章目录 一.RabbitMQ 介绍以及工作模式1.RabbitMQ的介绍&#xff1a;2.RabbitMQ的工作模式&#xff1a; 二.RabbitMQ安装1.安装Erlang语言环境2.安装RabbitMQ 三.在.Net中使用RabbitMQ1.HelloWorld模式2.工作队列模式3.发布订阅模式4.Routing路由模式和Topics通配符模式 一.Ra…

使用Python工具库SnowNLP对评论数据标注(二)

这一次用pandas处理csv文件 comments.csv import pandas as pd from snownlp import SnowNLPdf pd.read_csv("C:\\Users\\zhour\\Documents\\comments.csv")#{a: [1, 2, 3], b: [4, 5, 6], c: [7, 8, 9]}是个字典 emotions[] for txt in df[sentence]:s SnowNLP(…

Kali Linux扩容(使用图形化界面)

因为今天在拉取vulhub中的镜像的时候报错空间不够&#xff0c;因为最开始只给了20GB的空间&#xff0c;所以现在需要扩容了&#xff0c;结合了一下网上的找到了简便的解决方法 1.首先虚拟机设置->磁盘->扩展 小插曲&#xff1a;在对虚拟机磁盘进行扩容以后&#xff0c;…