QT-JSON

#include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>#include <QFile>#include <QDebug>void createJsonFile() {// 创建一个JSON对象  键值对QJsonObject jsonObj;jsonObj["name"] = "John Doe";jsonObj["age"] = 30;jsonObj["email"] = "john.doe@example.com";// 创建一个JSON数组QJsonArray jsonArr;jsonArr.append("C++");jsonArr.append("Python");
jsonArr.append("JavaScript");jsonArr.append(123);// 将数组添加到JSON对象
jsonObj["languages"] = jsonArr;// 将JSON对象转换为JSON文档
QJsonDocument jsonDoc(jsonObj);// 将JSON文档转换为字符串(也可以是压缩格式)
QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Indented);// 将JSON数据写入文件
QFile file("output.json");if (!file.open(QIODevice::WriteOnly)) {qDebug() << "Failed to open file for writing";return;}file.write(jsonData);file.close();}qDebug() << "JSON data saved to output.json";int main() {createJsonFile();return 0;}

#include "widget.h"#include "ui_widget.h"#include <QFile>#include <QJsonArray>#include <QJsonDocument>#include <QJsonObject>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{}ui->setupUi(this);QJsonObject rootObj;rootObj["cityid"]  = "1010100";rootObj["date"]    
= "2024-01-23";rootObj["weather"] = "雨夹雪";rootObj["tmp"]     
= 3;QJsonArray jsonArray;jsonArray.append("data1");jsonArray.append("data2");jsonArray.append("data3");jsonArray.append(100);rootObj["testArry"] = jsonArray;QJsonDocument jsonDoc(rootObj);QByteArray jsonArry = jsonDoc.toJson();QFile file("D:/QT/test.json");file.open(QIODevice::WriteOnly);file.write(jsonArry);file.close();Widget::~Widget(){delete ui;}

#include "widget.h"#include "ui_widget.h"#include <QFile>#include <QJsonArray>#include <QJsonDocument>#include <QJsonObject>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);QJsonObject rootObj;rootObj["cityid"]  = "1010100";rootObj["date"]    
= "2024-01-23";rootObj["weather"] = "雨夹雪";
= 3;rootObj["tmp"]     
//Json数组
QJsonArray jsonArray;jsonArray.append("data1");jsonArray.append("data2");jsonArray.append("data3");jsonArray.append(100);rootObj["testArry"] = jsonArray;QJsonObject alarmObj;alarmObj["alamType"] = "雪灾";alarmObj["alamLeve"] = "黄色";alarmObj["alamTitle"] = "福州市警告老陈多穿点衣服";rootObj["alam"] = alarmObj;QJsonObject day0;day0["day"] = "星期一";day0["wea"] = "晴";day0["tem"] = 5.7;QJsonObject day1;day1["day"] = "星期二";day1["wea"] = "晴";day1["tem"] = 7;QJsonObject day2;day2["day"] = "星期三";day2["wea"] = "多云";day2["tem"] = 17;QJsonArray dayArray;dayArray.append(day0);dayArray.append(day1);dayArray.append(day2);rootObj["days"] = dayArray;//通过QJsonDocument把JSON数据转换成QByteArrayQJsonDocument jsonDoc(rootObj);QByteArray jsonArry = jsonDoc.toJson();QFile file("D:/QT/test.json");file.open(QIODevice::WriteOnly);file.write(jsonArry);file.close();}Widget::~Widget(){delete ui;}

 #include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>#include <QDebug>void parseJson() {// JSON字符串/*R 是用于定义原始字符串字面量(Raw String Literal)的标记。在C++中,原始字符串字面量是一种方便的语法,用于创建包含多行文本和特殊字符的字符串,而无需转义。R"("chenlichen")"*/QString testStr = "chenli\"c";QString jsonString = R"({"name": "John Doe","age": 30,"email": "john.doe@example.com","skills": ["C++", "Python", "JavaScript"]})";/*jsonString = "{\n""    \"name\": \"John Doe\",\n""    \"age\": 30\n""}";*/// 将JSON字符串转换为QJsonDocumentQJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());// 检查JSON文档是否包含一个对象if (!jsonDoc.isNull() && jsonDoc.isObject()) {// 获取JSON对象QJsonObject jsonObj = jsonDoc.object();
// 访问对象的键值
QString name = jsonObj["name"].toString();int age = jsonObj["age"].toInt();QString email = jsonObj["email"].toString();qDebug() << "Name:" << name;qDebug() << "Age:" << age;qDebug() << "Email:" << email;}// 处理JSON数组
if (jsonObj.contains("skills") && jsonObj["skills"].isArray()) {QJsonArray skillsArray = jsonObj["skills"].toArray();for (const QJsonValue &value : skillsArray) {qDebug() << "Skill:" << value.toString();}}} else {qDebug() << "Invalid JSON...";}int main() {parseJson();return 0;}

#include <QJsonDocument>#include <QJsonObject>#include <QMap>#include <QDebug>void parseJsonToMap() {// JSON字符串
QString jsonString = R"({"name": "John Doe","age": "30","email": "john.doe@example.com"})";// 将JSON字符串转换为QJsonDocumentQJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());// 准备一个QMap来存储解析的数据
QMap<QString, QString> dataMap;// 解析JSON对象并填充QMapif (!jsonDoc.isNull() && jsonDoc.isObject()) {QJsonObject jsonObj = jsonDoc.object();for (auto key : jsonObj.keys()) {dataMap[key] = jsonObj.value(key).toString();}} else {qDebug() << "Invalid JSON...";}// 打印QMap内容
for (auto key : dataMap.keys()) {qDebug() << key << ":" << dataMap[key];}}int main() {parseJsonToMap();return 0;}

#include "widget.h"#include "ui_widget.h"#include <QFile>#include <QJsonDocument>#include <QJsonObject>#include <QDebug>#include <QJsonArray>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);//第一步:读取JSON文件保存到QByteArray中
QFile file("D:/QT/test.json");file.open(QIODevice::ReadOnly);QByteArray rawData = file.readAll();file.close();//第二步:把QByteArray转成JSONDocQJsonDocument jsonDoc = QJsonDocument::fromJson(rawData);if( !jsonDoc.isNull() && jsonDoc.isObject()){//第三步:把JsonDoc转成JsonObjQJsonObject jsonRoot = jsonDoc.object();//第四步:如果解析普通键值对,通过“下表键”来获取值
QString strW      
= jsonRoot["weather"].toString();QString strCityId = jsonRoot["cityid"].toString();int tempretrue = jsonRoot["tmp"].toInt();qDebug() << strW;qDebug() << strCityId;qDebug() << QString::number(tempretrue);//第五步:判读是否是一个数组if(jsonRoot.contains("testArry") && jsonRoot["testArry"].isArray()){qDebug() << "array";//如果是数组,转换成JSON数组QJsonArray testArray = jsonRoot["testArry"].toArray();//遍历数组,访问每一项for(QJsonValue val : testArray){//QJsonValue的type函数返回数据类型,根据不同的数据类型处理数据// QJsonValue::Type t = val.type();switch (val.type()) {case QJsonValue::Double:qDebug() << QString::number(val.toDouble());break;case QJsonValue::String:qDebug() << val.toString();break;case QJsonValue::Object:break;}}}//第六步:判断某个键对应的值,是否是一个json对象if(jsonRoot.contains("alam") && jsonRoot["alam"].isObject()){//转成Json对象后处理QJsonObject alamObj = jsonRoot["alam"].toObject();qDebug() << alamObj["alamLeve"].toString();qDebug() << alamObj["alamTitle"].toString();qDebug() << alamObj["alamType"].toString();}if(jsonRoot.contains("days") && jsonRoot["days"].isArray()){QJsonArray dayArray = jsonRoot["days"].toArray();for(QJsonValue val : dayArray){//if(val.type() ==QJsonValue::Object ){if(val.isObject()){QJsonObject obj = val.toObject();qDebug() << obj["day"].toString();qDebug() << QString::number(obj["tem"].toDouble());qDebug() << obj["wea"].toString();}}}}}Widget::~Widget(){delete ui;}

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

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

相关文章

解决各个系统报错TDengine:no taos in java.library.path问题

windows 系统解决办法 在本地上安装一个TD的Windows客户端&#xff0c;注意安装的客户端版本一定要和服务端TD版本完全一致。&#xff08;或者将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下&#xff09; 客户端各个历史版本下载链接&#xff1a;TDengin…

我提出结构学习的思路,意图用结构学习代替机器学习

我提出结构学习的思路&#xff0c;意图用结构学习代替机器学习 1.机器学习的本质和缺点 机器学习的规律是设计算法、用数据训练算法、让算法学会产生正确的数据回答问题&#xff0c;其缺点在于&#xff0c;需要大规模训练数据和巨大算力还其次&#xff0c;机器学习不能产生智…

【Hive 运维实战】一键管理 Hive 服务:Metastore 与 HiveServer2 控制脚本开发与实践

一、引言 在大数据开发中&#xff0c;Hive 作为重要的数据仓库工具&#xff0c;其核心服务metastore&#xff08;元数据服务&#xff09;和hiveserver2&#xff08;查询服务&#xff09;的启停管理是日常运维的基础操作。手动执行命令启停服务不仅效率低下&#xff0c;还容易因…

简历制作要精而不简

不得不说&#xff0c;不管是春招&#xff0c;还是秋招&#xff0c;我们在求职时&#xff0c;第一步便是制作一份简历。不得不承认&#xff0c;好的简历&#xff0c;就像一块敲门砖&#xff0c;能让面试官眼前一亮&#xff0c;让应聘成功的概率增添一分。 对于一个初次求职者来…

深入Java8-日期时间API:TemporalQuery、TemporalQueries类

JDK版本&#xff1a;11 TemporalQuery FunctionalInterface public interface TemporalQuery<R> {R queryFrom(TemporalAccessor temporal); } emporalQuery是Java 8中用于时间查询的一个函数式接口&#xff0c;它允许用户对日期和时间进行查询。TemporalQuery接口中定…

Spring Boot + MyBatis 实现的简单用户管理项目的完整目录结构示例

&#x1f4c1; 示例项目结构&#xff08;基于 Maven&#xff09; user-management/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/usermanagement/ │ │ │ ├── controller/ │ │ │ │ └── UserC…

嵌入式RTC工作原理及应用场景

20ppm 是衡量 RTC&#xff08;实时时钟&#xff09;精度的关键指标&#xff0c;表示 每百万秒&#xff08;约11.57天&#xff09;的最大时间误差范围。以下是通俗易懂的解释&#xff1a; 1. ppm 的含义 ppm Parts Per Million&#xff08;百万分之一&#xff09; 1 ppm 1/1,…

[Godot][游戏开发] 如何在 Godot 中配置 Android 环境(适配新版 Android Studio)

在使用 Godot 进行 Android 项目的开发与导出时&#xff0c;配置 Android 环境是一项必要步骤。随着 Android Studio 的更新&#xff08;特别是自 Arctic Fox 版本起&#xff09;&#xff0c;安装方式发生了变化&#xff0c;默认不再引导用户手动配置 SDK/JDK/NDK&#xff0c;而…

量子语言模型——where to go

1️⃣ 在大语言模型&#xff08;LLM&#xff09;高度发达的今天&#xff0c;还研究这些小模型&#xff08;如n-gram、RNN、量子语言模型&#xff09;是否有意义&#xff1f; ✅ 有意义&#xff0c;但意义已经转变了——不再是用于「直接生产 SOTA 应用」&#xff0c;而是&…

机电的焊接技术

焊接技术:高温或高压条件下,使用焊接材料(焊条或焊丝)将两块或两块以上的母材(待焊接的工件)连接 成一个整体的操作方法&#xff61; 2.3.1 焊接设备和焊接材料的分类及选用 1.焊接设备&#xff08;对应焊接方法&#xff09; 2.焊接材料&#xff08;焊条、焊丝、焊剂、焊接气…

深入解析Vue.js:构建现代Web应用的高效之道

一、Vue.js 的核心设计理念 Vue.js 以渐进式框架为定位,强调轻量灵活与易上手性,允许开发者根据项目需求逐步引入核心功能或扩展模块。其核心设计遵循以下原则: 响应式数据绑定:通过数据劫持(Object.defineProperty/Proxy)和发布 - 订阅模式,实现视图与数据的自动同步,…

信贷特征分析可视化函数(外置指标面板完整版)

XY的基础处理 target_column[SeriousDlqin2yrs] feature_columns[RevolvingUtilizationOfUnsecuredLines, age,NumberOfTime30-59DaysPastDueNotWorse, DebtRatio, MonthlyIncome,NumberOfOpenCreditLinesAndLoans, NumberOfTimes90DaysLate,NumberRealEstateLoansOrLines, Nu…

ESP32-idf学习(三)esp32C3连接iot

一、前言 上一篇用蓝牙作为通信方式&#xff0c;虽然勉强完成了控制&#xff0c;但结果显然不是那么符合我们的预期&#xff0c;既然用蓝牙还需要研究一段时间&#xff0c;那我们就先整一些现成的&#xff0c;不需要研究的&#xff01;iot云平台&#xff01;这里当然也是通过w…

Axure RP11安装、激活、汉化

一:注册码 Axure RP11.0.0.4122在2025-5-29日亲测有效: 49bb9513c40444b9bcc3ce49a7a022f9

高光谱成像相机:基于高光谱成像技术的玉米种子纯度检测研究

种子纯度是衡量种子质量的核心指标之一&#xff0c;直接影响农作物产量与品质。传统检测方法&#xff08;如形态学观察、生化分析&#xff09;存在耗时长、破坏样本、依赖人工等缺陷。近年来&#xff0c;高光谱成像技术因其融合光谱与图像信息的优势&#xff0c;成为无损检测领…

Excel 中的TEXTJOIN用法(基础版),将Excel 多个单元格内容按条件合并到一个单元格

1.新建一张数据透视表 选择你需要的维度所在的列 2.点击确定生成&#xff0c;勾选右边的维度 3.选中单元格&#xff0c;通过 ShiftF3 查看函数参数 第一个参数&#xff1a;分隔符&#xff0c;用来分隔合并的文本&#xff0c;不需要分隔用"" 第二个参数&#xff1a;…

2025.05.28【Choropleth】群体进化学专用图:区域数据可视化

Load geospatial data Start by loading your geospatial data in R, and build a basic plot. Data from the package The cartography comes with a set of geospatial data included. Learn how to use it to build a choropleth map. 文章目录 Load geospatial dataData …

QT-Creator安装教程(windows)

目录 1,下载 1.1 镜像源下载 1.2 运行下载的exe文件 1.2.1 QT5 版本安装 1.2.2 QT6 版本安装 1.2.3 如何在安装完成之后,继续添加扩展包 1,下载 1.1 镜像源下载 地址:Index of /qtproject/

Deepin 23.10安装Docker

个人博客地址&#xff1a;Deepin 23.10安装Docker | 一张假钞的真实世界 Deepin 是基于 Debian 的国产 Linux 发行版&#xff0c;安装 Docker Desktop 可能会遇到兼容性问题&#xff0c;因为 Docker Desktop 官方主要支持 Ubuntu/Debian/Red Hat/Fedora/Arch 等主流发行版&…

ARXML解析与可视化工具

随着汽车电子行业的快速发展,AUTOSAR标准在车辆软件架构中发挥着越来越重要的作用。然而,传统的ARXML文件处理工具往往存在高昂的许可费用、封闭的数据格式和复杂的使用门槛等问题。本文介绍一种基于TXT格式输出的ARXML解析方案,为开发团队提供了一个高效的替代解决方案。 …