详解Qt中的JSON操作

这篇具有很好参考价值的文章主要介绍了详解Qt中的JSON操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其简洁的结构、易读性以及与多种编程语言的良好兼容性,在现代Web服务、API交互以及数据持久化场景中得到了广泛应用。Qt作为一款功能强大的跨平台应用开发框架,自Qt 5.0起便内置了对JSON的支持,提供了方便的C++ API供开发者进行JSON数据的生成、解析、操作与序列化。本篇博文将首先回顾JSON的基础知识,随后详细介绍Qt中如何对复杂JSON进行组织与读写,并辅以详细的C++示例代码。

一、JSON基础知识

1. JSON对象

JSON对象是由一组键值对构成的数据结构,每个键(key)是字符串,值(value)可以是以下几种类型之一:

  • 字符串(string)
  • 数字(number)
  • 布尔值(boolean)
  • null
  • 另一个JSON对象
  • JSON数组

JSON对象以花括号 {} 包裹,键值对之间用逗号 , 分隔,键与对应的值之间以冒号 : 分隔。例如:

{
  "name": "John Doe",
  "age": 30,
  "isEmployed": true,
  "address": {
    "street": "123 Main St.",
    "city": "Anytown",
    "country": "USA"
  }
}

2. JSON数组

JSON数组是一系列有序的值的集合,其元素可以是上述提到的任何JSON类型,包括其他数组或对象。数组以方括号 [] 包裹,元素之间用逗号 , 分隔。例如:

[
  "Apple",
  "Banana",
  "Cherry",
  {
    "id": 1,
    "color": "Red"
  },
  [
    x1, x2, x3
  ]
]

注:复杂的json中,数组的元素也可以是JSON对象,然后层层嵌套。

二、Qt中JSON的组织与读写

Qt提供了以下几个关键类来处理JSON数据:

  • QJsonObject: 表示JSON对象,封装了键值对的管理。
  • QJsonArray: 表示JSON数组,实现了动态大小的值列表。
  • QJsonValue: 封装了JSON支持的数据类型,包括字符串、数字、布尔值、null、对象和数组。
  • QJsonDocument: 代表整个JSON文档,负责从/向UTF-8文本或Qt内部二进制格式进行序列化与反序列化。

1. 生成JSON数据

以下示例展示了如何使用Qt创建一个复杂的JSON对象,包含嵌套对象和数组:

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>

QJsonObject createComplexJSONObject() {
    QJsonObject personObject;
    personObject["name"] = "John Doe";
    personObject["age"] = 30;
    personObject["isEmployed"] = true;

    QJsonObject addressObject;
    addressObject["street"] = "123 Main St.";
    addressObject["city"] = "Anytown";
    addressObject["country"] = "USA";
    personObject["address"] = addressObject;

    QJsonArray hobbiesArray;
    hobbiesArray.append("Reading");
    hobbiesArray.append("Gaming");
    personObject["hobbies"] = hobbiesArray;

    return personObject;
}

int main() {
    QJsonObject person = createComplexJSONObject();
    QJsonDocument document(person);

    // 输出JSON字符串
    QString jsonString = document.toJson(QJsonDocument::Indented);
    qDebug() << "Generated JSON:\n" << jsonString;

    return 0;
}

2. 解析JSON数据

给定一个JSON字符串,我们可以使用Qt轻松将其解析为相应的对象或数组结构:

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

void parseAndPrintJSON(const QString &jsonString) {
    QJsonParseError error;
    QJsonDocument document = QJsonDocument::fromJson(jsonString.toUtf8(), &error);

    if (error.error != QJsonParseError::NoError) {
        qCritical() << "JSON parsing error: " << error.errorString();
        return;
    }

    if (document.isObject()) {
        QJsonObject object = document.object();

        for (auto it = object.begin(); it != object.end(); ++it) {
            const QString key = it.key();
            qDebug() << "Key: " << key;
        }

        qDebug()<<"name:"<<object.value("name").toString();
        qDebug()<<"age:"<<object.value("age").toInt();
        qDebug()<<"skill:"<<object.value("skills").toArray();
        qDebug()<<"projects:"<<object.value("projects").toArray();
    }
}

int main() {
    const QString jsonString = R"({
        "name": "Jane Smith",
        "age": 35,
        "skills": ["Programming", "Design"],
        "projects": [
            {"title": "Project A", "status": "ongoing"},
            {"title": "Project B", "status": "completed"}
        ]
    })";

    parseAndPrintJSON(jsonString);

    return 0;
}

3. 访问与修改JSON数据

Qt提供的类提供了丰富的接口来访问和修改已解析的JSON数据。以下示例展示了如何查询、添加、更新和删除JSON对象中的键值对:

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

void manipulateJSON(QJsonObject &person) {
    // 查询值
    bool isEmployed = person["isEmployed"].toBool();
    qDebug() << "Is employed: " << isEmployed;

    // 添加键值对
    person["favoriteColor"] = "Blue";

    // 更新现有值
    person["age"] = 31;

    // 删除键值对
    person.remove("hobbies");

    // 修改嵌套对象
    QJsonObject address = person["address"].toObject();
    address["city"] = "New City";
    person["address"] = address;
}

int main() {

    QJsonObject personObject;
    personObject["name"] = "John Doe";

    personObject["age"] = 30;

    personObject["isEmployed"] = true;


    QJsonObject addressObject;
    addressObject["street"] = "123 Main St.";
    addressObject["city"] = "Anytown";
    addressObject["country"] = "USA";
    personObject["address"] = addressObject;

    QJsonArray hobbiesArray;
    hobbiesArray.append("Reading");
    hobbiesArray.append("Gaming");
    personObject["hobbies"] = hobbiesArray;

    manipulateJSON(personObject);

    QJsonDocument updatedDoc(personObject);
    QString updatedJson = updatedDoc.toJson(QJsonDocument::Indented);
    qDebug() << "Updated JSON:\n" << updatedJson;

    return 0;
}

三、总结

Qt框架通过QJsonObjectQJsonArrayQJsonValueQJsonDocument类为开发者提供了完整的JSON处理能力。无论是构建复杂的JSON结构,解析来自外部源的JSON数据,还是对已有的JSON进行查询、更新与删除操作,Qt的API都提供了直观且高效的解决方案。掌握这些工具将极大地简化Qt应用程序中与JSON数据相关的任务,使其能够无缝地与其他系统和服务进行数据交换。文章来源地址https://www.toymoban.com/news/detail-861496.html

到了这里,关于详解Qt中的JSON操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt中JSON的使用

    一.前言: JSON是一种轻量级数据交换格式,常用于客户端和服务端的数据交互,不依赖于编程语言,在很多编程语言中都可以使用JSON,比如C,C++,Java,Android,Qt。除了JSON,还有一种数据传输格式XML,相较于XML,JSON更加便于阅读和书写。 JSON 有两种数据格式:JSON对象和JSO

    2024年02月14日
    浏览(44)
  • qt学习:json数据文件读取写入

    目录 什么是json 基本格式 例子  解析json文件数据到界面上 组合json数据文档对象 json是一种轻量级的数据交互格式,简单来说,json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互 以键值对的形式存放 键-----字符串 值------基本数据类型,字

    2024年01月24日
    浏览(46)
  • C++QT开发——Xml、Json解析

    可扩展标记语言,标准通用标记语言(Extensible Markup Language)的子集,简称XML,是一种定义电子文档结构和描述其内容的国际标准语言,被设计用来传输和存储数据。 可扩展标记语言与Access],Oracle]和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:

    2024年02月06日
    浏览(47)
  • 【Qt】使用Qt实现Web服务器(九):EventSource+JSON实现工业界面数据刷新

    效果如下,实时刷新温度、湿度

    2024年04月08日
    浏览(51)
  • Qt 5.14.2 深度解析:打造高效JSON处理利器

    Qt 5.14.2 深度解析:打造高效JSON处理利器 参考资料 Qt官方文档:QJsonDocument Qt官方文档:QJsonObject Qt官方文档:QJsonArray Qt官方文档:QJsonValue 引言 在当今的软件开发世界中,JSON(JavaScript Object Notation)已经成为了数据交换的标准格式。Qt,作为一个跨平台的C++框架,自然也提供

    2024年03月10日
    浏览(49)
  • Qt实践录:实现http服务并解析json协议

    本文主要记录在 Qt 中实现http服务的示例,包括解析json协议数据。 很早之前,对自己写的一个工程测试,需对接一个C++写的web服务,但局域网中尚未有,于是部署之,web服务使用了cgi技术,于是找了fastcgi等库和程序,最终和nginx一道合力完成部署。当时觉得比较麻烦,C++应该

    2024年02月12日
    浏览(45)
  • Python框架下的qt设计之JSON格式化转换小程序

    代码展示: 主程序代码: qt界面py代码 效果展示:

    2024年04月16日
    浏览(45)
  • Qt 使用HTTP请求网络API并接收返回的JSON格式的数据

    引入网络模块: mainwindow.h: mainwindow.cpp:

    2024年02月13日
    浏览(51)
  • Python 中的 JSON 模块详解及 JSON 数组的输出格式示例

    正文: 在 Python 中,JSON(JavaScript Object Notation)是一种常用的数据交换格式。Python 提供了一个内置模块 json 来处理 JSON 数据。本文将详细介绍 Python 中的 json 模块,包括 JSON 对象的序列化和反序列化,以及如何处理 JSON 数组。 1. 导入 json 模块 在使用 json 模块之前,我们需要

    2024年02月07日
    浏览(51)
  • Qt网络编程post请求,数据格式为json或x-www-form-urlencoded

    目录 Qt网络编程post请求,数据格式为json或x-www-form-urlencoded 一、.H文件 1、.h头文件 2、.h主代码 二、.CPP文件 1、主代码  三、响应信息 返回结果(Josn数据格式输出) 四、Post数据格式参数及数据类型定义 1、Post:application/x-www-form-urlencoded数据类型格式 2、Post:application/json数据

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包