当前位置: 首页 > news >正文

Qt QJsonObject

Qt

  • 📦 QJsonObject 详解
    • 🏛 什么是 QJsonObject?
    • ⚡ QJsonObject 的本质
    • 🛠️ 核心特性
    • 📝 基本操作示例
      • 🔧 创建与初始化
      • 🔍 访问与修改
      • 📦 嵌套使用(JSON 对象嵌套)
    • ✅ 与其他 JSON 类的关系
    • ❌ 常见注意事项
    • 🏊 典型应用场景

📦 QJsonObject 详解


🏛 什么是 QJsonObject?

QJsonObject 是 Qt6 中处理 JSON 数据的核心类之一,用于表示 JSON 中的对象类型(即由键值对组成的无序集合)。它继承自 QJsonValue,是 Qt 对 JSON 规范中「对象(Object)」的具体实现,支持对键值对的增删改查等操作。


⚡ QJsonObject 的本质

  • 数据结构本质:本质上是一个键值对的无序映射(类似 C++ 标准库的 std::unordered_map<QString, QJsonValue>),键为字符串类型(QString),值为 QJsonValue 类型(可表示字符串、数字、布尔、数组、对象等 JSON 支持的数据类型)。
  • 内存管理:内部维护动态数组存储键值对,自动处理内存分配与释放,无需手动管理。
  • JSON 规范映射:严格遵循 JSON 规范,仅支持 JSON 定义的基础数据类型,确保与其他 JSON 解析器的兼容性。

🛠️ 核心特性

  • 🔑 键唯一:每个键在 QJsonObject 中唯一,重复添加会覆盖原有值。
  • 🔄 动态伸缩:支持动态添加/删除键值对,大小随内容自动调整。
  • 🔗 类型兼容:值(QJsonValue)可兼容字符串、数字、布尔、QJsonArray、嵌套 QJsonObject 等。
  • 📤 序列化支持:可直接转换为 JSON 格式字符串(通过 QJsonDocument),或从字符串解析生成。

📝 基本操作示例

🔧 创建与初始化

#include <QJsonObject>
#include <QJsonValue>// 方法1:直接构造
QJsonObject obj;
obj["name"] = "Qt";
obj["version"] = 6.5;
obj["is_stable"] = true;// 方法2:使用初始化列表(Qt6支持)
QJsonObject obj2 = {{"name", "Qt"},{"version", 6.5},{"is_stable", true}
};

🔍 访问与修改

// 获取值(返回QJsonValue)
QJsonValue nameVal = obj["name"];
double version = obj["version"].toDouble(); // 转换为具体类型// 修改值
obj["version"] = 6.6;// 判断键是否存在
if (obj.contains("is_stable")) {bool stable = obj["is_stable"].toBool();
}// 删除键值对
obj.remove("is_stable");

📦 嵌套使用(JSON 对象嵌套)

// 嵌套QJsonObject
QJsonObject subObj;
subObj["major"] = 6;
subObj["minor"] = 6;QJsonObject mainObj;
mainObj["version"] = subObj; // 将子对象作为值添加// 访问嵌套对象
int minorVersion = mainObj["version"].toObject()["minor"].toInt(); // 结果为6

✅ 与其他 JSON 类的关系

  • 依赖 QJsonValue:QJsonObject 的值必须是 QJsonValue 类型,通过它兼容不同数据类型。

  • 配合 QJsonDocument:需通过 QJsonDocument 进行序列化(toJson())或反序列化(fromJson()):

    // 序列化:QJsonObject → JSON字符串
    QJsonDocument doc(obj);
    QByteArray jsonData = doc.toJson(QJsonDocument::Indented); // 带缩进的格式化输出// 反序列化:JSON字符串 → QJsonObject
    QJsonObject parsedObj = QJsonDocument::fromJson(jsonData).object();
  • 与 QJsonArray 交互:QJsonArray 可包含 QJsonObject,实现 JSON 数组嵌套对象的结构。


❌ 常见注意事项

  • 键的类型限制:键必须是 QString,不能为数字或其他类型(遵循 JSON 规范)。
  • 类型转换安全:使用 toXxx() 方法(如 toInt()toObject())时,需确保值的类型匹配,否则返回默认值(如 0、空对象)。
  • 性能考量:大规模 JSON 操作时,建议批量构建后再处理,避免频繁修改。

🏊 典型应用场景

  • 解析 API 响应:处理后端返回的 JSON 格式数据。
  • 配置文件读写:将配置信息以 JSON 格式存储,通过 QJsonObject 解析/生成。
  • 数据交换:在进程间或网络传输中,以 JSON 格式封装数据。

文章转载自:

http://O1C8g0Ed.stwxr.cn
http://TuPfORVw.stwxr.cn
http://VnxikMOW.stwxr.cn
http://x2fCuFg7.stwxr.cn
http://AXdnJOaH.stwxr.cn
http://nxJRdzdP.stwxr.cn
http://KM1I61Yi.stwxr.cn
http://9yus7BhL.stwxr.cn
http://Cvj0lH5w.stwxr.cn
http://4AVqFI1J.stwxr.cn
http://w0zuMEa1.stwxr.cn
http://dLZKu5k3.stwxr.cn
http://NcTcw9J0.stwxr.cn
http://y7PJpMm1.stwxr.cn
http://g8ItIZfd.stwxr.cn
http://d7G46SpB.stwxr.cn
http://dIk1WNFY.stwxr.cn
http://1cS5YEsO.stwxr.cn
http://lfw93NCP.stwxr.cn
http://sZ9qFBqY.stwxr.cn
http://bdeGiu3n.stwxr.cn
http://sY7xpoik.stwxr.cn
http://gqtqET57.stwxr.cn
http://Q0g5cYHw.stwxr.cn
http://GkJ5zYoZ.stwxr.cn
http://ktRyRAAI.stwxr.cn
http://Wo6X11B2.stwxr.cn
http://RdkbELUG.stwxr.cn
http://MG8tjO6s.stwxr.cn
http://hV2iJVGK.stwxr.cn
http://www.dtcms.com/a/367152.html

相关文章:

  • 我辞职了,接替我的人私底下找我,我直接把她删了。明明有个交接群,她是觉得在群里提问会显得自己不够专业吗? 网友:凭啥惯着
  • Docker(②创造nginx容器)
  • 2025年B端产品经理进阶指南:掌握这些计算机专业技能,决胜职场!
  • 2025职场进阶:B端产品经理必备的计算机专业技能精要
  • 2025 年职场必看:B 端产品经理优化产品的计算机专业技能全解析​
  • 拉格朗日多项式
  • Elasticsearch面试精讲 Day 8:聚合分析与统计查询
  • 第13章 Jenkins性能优化
  • WebView安全实现(二)
  • push pop 和 present dismiss
  • macOS下基于Qt/C++的OpenGL开发环境的搭建
  • Swift 解法详解:LeetCode 371《两整数之和》
  • 【前端:Html】--5.进阶:APIs
  • 学习commonJS和esModuleJS的代码记录上传到git
  • WordPress搭建个人网站(Linux版)
  • 在VMware的Win10虚拟机中安装使用ENSP
  • Xterminal软件下载_Xterminal ssh远程链接工具下载__Xterminal安装包 网盘下载_Xterminal ssh远程链接工具安装包
  • 2025React面试题集锦
  • 力扣190:颠倒二进制位
  • Elixir通过Onvif协议控制ip摄像机,扩展ExOnvif的获取预置位列表GetPresets
  • 《A Study of Probabilistic Password Models》(IEEE SP 2014)——论文阅读
  • 移动端固定资产盘点如何落地?系统操作全指南
  • 工业控制的“智慧大脑”:数字孪生技术如何预判生产风险?
  • 2025国赛B题保姆级教程思路分析 碳化硅外延层厚度的确定
  • 蔚来8月狂卖3.1万辆,反超理想引热议!
  • 【面试题】介绍一下BERT和GPT的训练方式区别?
  • 阿瓦隆 A1146 Pro 63T:性能与设计详解,探索区块链挖矿新高度
  • 渲染是否伤电脑?从根源减少损伤的技巧
  • 小白也能看懂,HTTP中的文件上传与下载到底发生了什么?
  • Ansible Playbook自动化运维全攻略