Qt QJson 使用

news2024/11/26 0:32:09

文章目录

  • 1. 简介
  • 2. 简单实例
  • 3. 结果

1. 简介

QJson 是一个用于 Qt 应用程序的 JSON 解析和生成库。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读性和可扩展性,常用于 Web 应用程序中。QJson 将 JSON 数据解析为 QJsonDocument 对象,同时可以将 QJsonDocument 对象转换为 JSON 数据。

♦ 常用的 QJson 类包括:

QJsonDocument 表示一个 JSON 文档,包括了一个 QJsonObject 或 QJsonArray 对象。

QJsonObject 表示一个 JSON 对象,包括了多个属性,每个属性都由一个键值对表示,键为字符串类型,值可以是数字、字符串、布尔值、数组或对象等类型。

QJsonArray 表示一个 JSON 数组,包括了多个元素,每个元素可以是数字、字符串、布尔值、数组或对象等类型。

♦ QJson 的使用步骤如下:

  1. 引入头文件:
    #include
  2. 解析 JSON 数据:
    QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);
  3. 获取 JSON 数据的根对象:
    QJsonObject jsonObj = jsonDoc.object();
  4. 获取属性值:
    QString value = jsonObj.value(“key”).toString();
  5. 生成 JSON 数据:
    QJsonObject jsonObj;
    jsonObj.insert(“key”, value);
    QJsonDocument jsonDoc(jsonObj);
    QString jsonData = jsonDoc.toJson();

需要注意的是,在使用 QJson 解析和生成 JSON 数据时,需要确保 JSON 数据的格式符合标准,否则可能会导致解析失败或生成的 JSON 数据不正确。

2. 简单实例

#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 生成 JSON 数据
    QJsonObject jsonObj;
    jsonObj.insert("name", "Alice");
    jsonObj.insert("age", 25);
    QJsonArray hobbyArray;
    hobbyArray.append("reading");
    hobbyArray.append("music");
    jsonObj.insert("hobbies", hobbyArray);
    QJsonDocument jsonDoc(jsonObj);
    QString jsonData = jsonDoc.toJson(QJsonDocument::Compact);
    qDebug() << "生成的 JSON 数据:" << jsonData;

    // 解析 JSON 数据
    QJsonDocument jsonDoc2 = QJsonDocument::fromJson(jsonData.toUtf8());
    QJsonObject jsonObj2 = jsonDoc2.object();
    QString name = jsonObj2.value("name").toString();
    int age = jsonObj2.value("age").toInt();
    QJsonArray hobbyArray2 = jsonObj2.value("hobbies").toArray();
    QStringList hobbies;
    for (int i = 0; i < hobbyArray2.size(); i++) {
        hobbies.append(hobbyArray2.at(i).toString());
    }
    qDebug() << "解析出的数据:" << name << age << hobbies;

    return a.exec();
}

3. 结果

在这里插入图片描述
先简单介绍,后续用到,在补充~

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

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

相关文章

Python通过natcap.invest库调用InVEST模型批处理数据(Carbon Storage and Sequestration模块)

InVEST&#xff08;Integrated Valuation of Ecosystem Servicesand Tradeoffs&#xff09;生态系统服务和权衡的综合评估模型&#xff0c;旨在通过模拟不同土地覆被情景下生态系统物质量和价值量的变化。它提供了多种生态系统服务功能评估&#xff0c;包括了淡水生态系统评估、…

Liunx压缩命令 - gz

gz命令详解及使用 Linux中gz命令的全称是gzip&#xff0c;它是一种常用的压缩程序&#xff0c;可将文件或目录压缩为.gz格式&#xff0c;以节省存储空间&#xff0c;同时也可以通过解压缩操作重新获取原始文件掌握 gzip 命令&#xff0c;可以帮助我们更加高效地进行文件压缩与…

视频编码测试平台CodecWar

​在视频编码的研究和开发中&#xff0c;我们经常需要对编码器的性能进行比较&#xff0c;一般的做法是构建一个数据集&#xff0c;然后将两个编码器在同一个配置上&#xff08;LD,RA,AI等&#xff09;使用不同参数&#xff08;CQP下一般为4个QP值&#xff09;编码&#xff0c;…

Py之pymc:pymc的简介、安装、使用方法之详细攻略

Py之pymc&#xff1a;pymc的简介、安装、使用方法之详细攻略 目录 pymc的简介 pymc的安装 pymc的使用方法 1、时序性任务 (1)、使用 Euler-Maruyama 方案推断 SDE 的参数 pymc的简介 PyMC&#xff08;以前称为PyMC3&#xff09;是一个专注于高级马尔科夫链蒙特卡洛&#x…

⑤电子产品拆解分析-人体感应灯

⑤电子产品拆解分析-人体感应灯 一、功能介绍二、电路分析以及器件作用三、原理图复现与学习 一、功能介绍 ①感应人体活动亮灯20S&#xff1b;②Micro-USB进行锂电池充电&#xff1b; 二、电路分析以及器件作用 三、原理图复现与学习 R1为下拉电阻&#xff0c;防止上电因芯…

功率放大器的选型原则和方法是什么

功率放大器是一种能够将低电平信号放大到足够高的电平以驱动负载的电子器件。在各种电子设备中&#xff0c;功率放大器被广泛应用&#xff0c;如音响系统、电视广播、汽车音响、射频通信等。因此&#xff0c;正确选型功率放大器非常重要&#xff0c;可以提高设备的性能和可靠性…

Web3的应用及发展

Web3兼具去中心化和交互性&#xff0c;打造了一个全新的互联网模式。在其中&#xff0c;用户可以绕过中介直接交互。dApp用户无需许可即可访问金融工具&#xff0c;以点对点的方式交易加密资产&#xff0c;获得参数型保险理赔&#xff0c;通过NFT交易可验证所有权的数字艺术品&…

[网鼎杯 2020 青龙组]bang 复现

一.前言 在NSSCTF练习安卓逆向,第一次遇到安卓脱壳题 大佬的题解只有一句话"frida-dexdump一把嗦" 听起来容易做起来难,还遇到了安卓虚拟机的玄学bug,折磨了我很久,好在最终使用真机成功dump并得到flag 题目来源:[网鼎杯 2020 青龙组]bang 如果直接用jadx打开会发现…

Vector - CAPL - CANoe DBC消息相关自动化_01

目录 getFirstCANdbFilename -- 获取数据库的文件名 代码示例 getFirstCANdbName -- 获取数据库的名称 代码示例 getSignalName -- 获取报文的信号名称 getMessageAttrInt -- 获取信号属性值 代码示例 getFirstCANdbFilename -- 获取数据库的文件名 功能&#xff1a;找出…

Python: 结合多进程和 Asyncio 以提高性能

动动发财的小手&#xff0c;点个赞吧&#xff01; 简介 多亏了 GIL&#xff0c;使用多个线程来执行 CPU 密集型任务从来都不是一种选择。随着多核 CPU 的普及&#xff0c;Python 提供了一种多处理解决方案来执行 CPU 密集型任务。但是直到现在&#xff0c;直接使用多进程相关的…

Pytrack 函数整理

1 distance 1.1 add_edge_lengths pytrack.graph.distance.add_edge_lengths(G, precision3) 将每条边的长度加到图里面去 1.1.1 主要参数 G路网图precision每一条边长度&#xff0c;保持几位小数 1.2 enlarge_bbox pytrack.graph.distance.enlarge_bbox(north, south, …

僵尸进程的避免 守护进程的创建 线程的创建,阻塞,数据传递 5.15

父子进程相关知识&#xff1a; 1.子进程结束时&#xff0c;系统 会立即自动刷新行缓存 2.手动结束进程&#xff1a; exit() exit(int status)&#xff1a;结束当前调用的进程&#xff0c;自动刷新缓存 标准库函数 头文件&#xff1a;#include <stdlib.h> _exit() …

压缩技术与常见linux解压/压缩命令总结

文章目录 1 RAR1.1 参数介绍1.2 压缩/解压1.3 分卷压缩/解压 2 7-Zip2.1 常用参数2.2 使用2.3 分卷压缩/解压 3 解压/压缩命令 总结 1 RAR RAR是一种专利文件格式&#xff0c;用于数据的压缩打包。 提供了强力压缩、分卷、加密和自解压模块 官方网址&#xff1a;https://www…

公有云——阿里云ECS服务器(IaaS)

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.了解云服务器的基础概念 1.云服务器的基础概念&#xff08;云服务器选择…

用IDEA写的第一个JavaWeb项目(保姆级)

任何事情只有0次和无数次&#xff0c;项目新建了第一个就有第二个 从第一次的略显青涩到后面的轻车熟路&#xff0c;区别就是第一次 ——Lungcen 在IDEA中新建一个web项目&#xff0c;有好几种方法。本人用的方法是通过maven构建工具来构建java项目的框架。对于web服务器的选择…

日志—加索引优化select

今天工作中遇到一个小问题&#xff0c;一个搜索接口&#xff0c;要加一个2个字段用于搜索 分析&#xff1a;这两个字段要在子表中去查询&#xff0c;查看原来mapper中的接口&#xff0c;已经连了N个子表&#xff0c;sql速度在10秒左右。 加上了新的子表&#xff0c;然后去试了…

悼念浩哥(左耳朵耗子),一个纯粹的技术人

上周末听闻浩哥的事了&#xff0c;期初还不信。在网上搜索消息&#xff0c;看来是真的。他才四十多岁&#xff0c;觉得非常可惜。很早就关注过浩哥&#xff0c;他是一位正直纯粹和爱分享的技术大牛。无论是技术分享还是人生感悟&#xff0c;或者是成长相关&#xff0c;都让我学…

展会直击 | 昂视精彩亮相CIBF2023深圳国际电池展

5月16日&#xff0c;CIBF2023深圳国际电池展在深圳国际会展中心&#xff08;宝安新馆&#xff09;正式开幕&#xff0c;昂视携2D视觉产品、3D视觉产品、锂电行业智能检测方案亮相9号馆T101-2展位&#xff0c;会场氛围火热&#xff0c;昂视展位人声鼎沸。 方案演示&#xff0c;助…

K8s进阶1——搭建K8s高可用集群

文章目录 一、资源清单二、系统初始化2.1 所有服务器配置2.2 master节点配置 三、nginxkeepalived3.1 主备机器上进行3.2 配置主节点3.3 配置备节点3.4 启动服务 四、部署etcd集群4.1 资源清单4.2 生成Etcd证书4.3 部署Etcd集群 五、安装Docker/kubeadm/kubelet5.1 安装docker5…

【数据库复习】第六章 关系数据理论 1

关系模式的设计 按照一定的原则从数量众多而又相互关联的数据中&#xff0c;构造出一组既能较好地反映现实世界&#xff0c;而又有良好的操作性能的关系模式 ●冗余度高 ●修改困难 ●插入问题 ●删除问题 ★产生问题的原因 属性间约束关系&#xff08;即数据间的依赖关系…