Qt解析json格式数据

devtools/2024/9/22 18:53:02/

文章目录

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

json_1">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_93">例二:解析前面的嵌套型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.ppmy.cn/devtools/8870.html

相关文章

【Java框架】SpringMVC(二)——SpringMVC数据交互

目录 前后端数据交互RequestMapping注解基于RequestMapping注解设置接口的请求方式RequestMapping注解的常用属性一个方法配置多个接口method属性params属性headers属性consumes属性produces属性 SpringMVC中的参数传递默认单个简单参数默认多个简单参数默认参数中有基本数据类…

外包干了16天,技术倒退明显

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四年的功能…

pytorch的mask-rcnn的模型参数解释

输入图像1920x1080,batch_size8为例. 训练阶段 loss_dict model(images,targets) 入参 images: List(Tensor(3,1920,1080))[8]targets: List(dict()[3])[8] dict详情见下表: keytypedtypesizeremarkboxesTensorfloat32(n,4)1the ground-truth boxes in [x1, y1, x2, y2] …

什么是防火墙?

在互联网行业当中&#xff0c;企业十分重视网络安全&#xff0c;服务器上通常会配置一些防火墙和防病毒软件等基础的安全措施&#xff0c;其中防火墙是比较常见的一种&#xff0c;今天就来具体了解一下什么是防火墙。 防火墙是一个由计算机硬件和软件组成的系统&#xff0c;也是…

Python学习之旅高级篇一:Web开发之旅

在Python学习之旅高级篇中&#xff0c;我们将探索如何使用Python进行Web开发。Flask和Django是两个非常流行的Python Web框架&#xff0c;它们可以帮助你快速构建Web应用程序。此外&#xff0c;了解如何设计和实现RESTful API也是Web开发中的一个重要技能。接下来的文章里&…

CentOS常见命令详解

CentOS常见命令详解 CentOS&#xff0c;作为企业级Linux发行版&#xff0c;以其稳定性和安全性受到了广大系统管理员和开发者的喜爱。在日常的系统管理和维护中&#xff0c;掌握一些常用的CentOS命令是至关重要的。本文将详细介绍一些CentOS中的常见命令&#xff0c;帮助读者更…

三. TensorRT基础入门-TensorRT简介

目录 前言0. 简述1. 什么是TensorRT2. TensorRT的工作流介绍3. TensorRT的一些限制总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第三章—TensorRT 基础入门&#xf…

如何利用R语言获取worldclim30s的气候数据

要使用R语言获取WorldClim30s的气候数据&#xff0c;你可以使用raster包来处理栅格数据&#xff0c;而且getData()函数可以方便地从WorldClim网站下载数据。以下是一个获取WorldClim30s数据的基本步骤&#xff1a; 安装和加载必要的包&#xff1a; 在R中&#xff0c;首先要确保…