QT-JSON

news2025/6/4 10:34:58

#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数据转换成QByteArray
 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 <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字符串转换为QJsonDocument
    QJsonDocument 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字符串转换为QJsonDocument
 QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());
 // 准备一个QMap来存储解析的数据
QMap<QString, QString> dataMap;
 // 解析JSON对象并填充QMap
 if (!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转成JSONDoc
 QJsonDocument jsonDoc = QJsonDocument::fromJson(rawData);
 if( !jsonDoc.isNull() && jsonDoc.isObject()){
 //第三步:把JsonDoc转成JsonObj
 QJsonObject 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.coloradmin.cn/o/2396335.html

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

相关文章

IP 风险画像技术略解

IP 风险画像的技术定义与价值 IP 风险画像通过整合 IP 查询数据与 IP 离线库信息&#xff0c;结合机器学习算法&#xff0c;为每个 IP 地址生成多维度风险评估模型。其核心价值在于将传统的静态 IP 黑名单升级为动态风险评估体系&#xff0c;可实时识别新型网络威胁&#xff0…

秋招Day12 - 计算机网络 - 基础

说一下计算机网络体系结构 OSI七层模型&#xff0c;TCP/IP四层模型和五层体系结构 说说OSI七层模型&#xff1f; 应用层&#xff1a;最靠近用户的层&#xff0c;用于处理特定应用程序的细节&#xff0c;提供了应用程序和网络服务之间的接口。表示层&#xff1a;确保从一个系…

【网络安全】——Modbus协议详解:工业通信的“通用语言”

目录 一、初识Modbus&#xff1a;工业通信的基石 1.1 协议全称 1.2 协议简史 二、核心特性解析 2.1 架构设计 2.2 典型应用场景 三、协议族全景图 3.1 协议栈分类 3.2 版本演进对比 四、协议报文深度解析 4.1 Modbus RTU帧结构 4.2 Modbus TCP报文 五、通信机制实…

【GlobalMapper精品教程】095:如何获取无人机照片的拍摄方位角

文章目录 一、加载无人机照片二、计算方位角三、Globalmapper符号化显示方向四、arcgis符号化显示方向一、加载无人机照片 打开软件,加载无人机照片,在GLobalmapperV26中文版中,默认显示如下的航线信息。 关于航线的起止问题,可以直接从照片名称来确定。 二、计算方位角 …

小提琴图绘制-Graph prism

在 GraphPad Prism 中为小提琴图添加显著性标记(如*P<0.05)的步骤如下: 步骤1:完成统计检验 选择数据表:确保数据已按分组排列(如A列=Group1,B列=Group2)。执行统计检验: 点击工具栏 Analyze → Column analyses → Mann-Whitney test(非参数检验,适用于非正态数…

[GHCTF 2025]SQL???

打开题目在线环境&#xff1a; 先尝试注入&#xff1a; id1;show databases; 发现报错&#xff0c;后来看了wp才知道这个题目是SQLite注入。 我看的是这个师傅的wp: https://blog.csdn.net/2401_86190146/article/details/146164505?ops_request_misc%257B%2522request%255Fid…

【科研绘图系列】R语言绘制GO term 富集分析图(enrichment barplot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图code 2code 3系统信息介绍 本文介绍了使用R语言绘制GO富集分析条形图的方法。通过加载ggplot2等R包,对GO term数据进行预处理,包括p值转换…

Laravel单元测试使用示例

Date: 2025-05-28 17:35:46 author: lijianzhan 在 Laravel 框架中&#xff0c;单元测试是一种常用的测试方法&#xff0c;它是允许你测试应用程序中的最小可测试单元&#xff0c;通常是方法或函数。Laravel 提供了内置的测试工具PHPUnit&#xff0c;实践中进行单元测试是保障代…

Kotlin委托机制使用方式和原理

目录 类委托属性委托简单的实现属性委托Kotlin标准库中提供的几个委托延迟属性LazyLazy委托参数可观察属性Observable委托vetoable委托属性储存在Map中 实践方式双击back退出Fragment/Activity传参ViewBinding和委托 类委托 类委托有点类似于Java中的代理模式 interface Base…

基于 HT for Web 轻量化 3D 数字孪生数据中心解决方案

一、技术架构&#xff1a;HT for Web 的核心能力 图扑软件自主研发的 HT for Web 是基于 HTML5 的 2D/3D 可视化引擎&#xff0c;核心技术特性包括&#xff1a; 跨平台渲染&#xff1a;采用 WebGL 技术&#xff0c;支持 PC、移动端浏览器直接访问&#xff0c;兼容主流操作系统…

精英-探索双群协同优化(Elite-Exploration Dual Swarm Cooperative Optimization, EEDSCO)

一种多群体智能优化算法&#xff0c;其核心思想是通过两个分工明确的群体——精英群和探索群——协同工作&#xff0c;平衡算法的全局探索与局部开发能力&#xff0c;从而提高收敛精度并避免早熟收敛。 一 核心概念 在传统优化算法&#xff08;如粒子群优化、遗传算法&#xf…

解决Ubuntu20.04上Qt串口通信 QSerialPort 打开失败的问题

运行Qt串口通信 open(QIODevice::ReadWrite) 时&#xff0c;总是失败。 1、打印失败原因 QString QSerialHelper::openSerail() {if(this->open(QIODevice::ReadWrite) true){return this->portName();}else{return "打开失败";//return this->errorStri…

设计模式——观察者设计模式(行为型)

摘要 本文详细介绍了观察者设计模式&#xff0c;包括其定义、结构、实现方式、适用场景以及实战示例。通过代码示例展示了如何在Spring框架下实现观察者模式&#xff0c;以及如何通过该模式实现状态变化通知。同时&#xff0c;对比了观察者模式与消息中间件在设计理念、耦合程…

【计算机系统结构】习题2

目录 1.有一条静态多功能流水线由5段组成&#xff0c;加法用1、2、4、5段&#xff0c;乘法用1、3、5段&#xff0c;第3段时间为&#xff0c;其余各段为&#xff0c;且流水线的输出可直接返回输入端或暂存器&#xff0c;若计算&#xff0c;试计算吞吐量、加速比、效率 2.有一动…

用户资产化视角下开源AI智能名片链动2+1模式S2B2C商城小程序的应用研究

摘要&#xff1a;在数字化时代&#xff0c;平台流量用户尚未完全转化为企业的数字资产&#xff0c;唯有将其沉淀至私域流量池并实现可控、随时触达&#xff0c;方能成为企业重要的数字资产。本文从用户资产化视角出发&#xff0c;探讨开源AI智能名片链动21模式S2B2C商城小程序在…

机器学习实验七--SVM垃圾邮件分类器

SVM垃圾邮件分类器 一、什么是SVM二、实例&#xff1a;垃圾邮件分类器1.实验要求2.原理解释2.1 数据预处理流程2.2 特征提取方法2.3 SVM分类器 3.代码实现4.实验结果5.实验总结 一、什么是SVM 支持向量机(Support Vector Machine, SVM)是一种监督学习算法&#xff0c;主要用于…

C++23 std::fstreams基础回顾

文章目录 引言1.1 std::fstreams概述1.2 std::fstreams的主要功能和常用操作 2. 独占模式 (P2467R1) 的详细介绍2.1 独占模式的定义和背景2.2 独占模式的作用和优势 3. C23 std::fstreams支持独占模式 (P2467R1) 的具体实现方式3.1 代码示例3.2 实现步骤解释 4. 使用该特性可能…

Git初识Git安装

目录 1. Git初识 1.1 提出问题 1.2 如何解决--版本控制器 1.3 注意事项 2 Git安装 2.1 Centos 2.2 Ubuntu 2.3 Windows 1. Git初识 1.1 提出问题 不知道你工作或学习时&#xff0c;有没有遇到这样的情况&#xff1a;我们在编写各种文档时&#xff0c;为了防止文档丢失…

使用Redisson实现分布式锁发现的【订阅超时】Subscribe timeout: (7500ms)

背景 使用 redisson 实现分布式锁&#xff0c;出现的异常&#xff1a; org.redisson.client.RedisTimeoutException: Subscribe timeout: (7500ms). Increase ‘subscriptionsPerConnection’ and/or ‘subscriptionConnectionPoolSize’ parameters 从异常信息读的出来一些东…

如何使用 poetry 创建虚拟环境,VSCode 如何激活使用 Poetry 虚拟环境(VSCode如何配置 Poetry 虚拟环境)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 使用 Poetry 创建和激活虚拟环境 📒🧪 创建项目并初始化 Poetry🔧 配置虚拟环境创建位置✅ 指定Python版本📦 安装依赖并创建虚拟环境🚀 激活虚拟环境📒 在 VSCode 中配置 Poetry 虚拟环境 📒🧭 方法一:使用 V…