深度剖析qjsondocument

一、qjsondocument简介

qjsondocument是Qt中提供的用于JSON文档的读写和操作的类。它是通过解析JSON数据,将其转化为一个QVariant类型的值,并通过相关的函数提取和操作JSON数据的类。

qjsondocument所支持的JSON类型如下:

  • 对象(Object)
  • 数组(Array)
  • 字符串(String)
  • 整数(Integer)
  • 浮点数(Double)
  • 布尔值(Boolean)
  • 空(Null)

下面是一个简单的JSON文档示例:

{
    "name": "Lily",
    "age": 18,
    "score": {
        "chinese": 90,
        "math": 95,
        "english": 98
    },
    "married": false,
    "hobbies": ["reading", "traveling", "swimming"]
}

使用qjsondocument读取该JSON文档:

QJsonDocument doc = QJsonDocument::fromJson(jsonText.toUtf8());
QJsonObject obj = doc.object();

QString name = obj.value("name").toString();
int age = obj.value("age").toInt();

QJsonObject score = obj.value("score").toObject();
int chineseScore = score.value("chinese").toDouble();
int mathScore = score.value("math").toDouble();
int englishScore = score.value("english").toDouble();

bool married = obj.value("married").toBool();

QJsonArray hobbies = obj.value("hobbies").toArray();
QStringList hobbyList;
for(auto hobby : hobbies){
    hobbyList.append(hobby.toString());
}

以上代码即可读取JSON文档中的数据,并保存到对应的变量中。

二、qjsondocument的操作

1、创建JSON文档

我们可以通过QJsonObject、QJsonArray、QJsonValue这三个类,分别来创建一个包含不同JSON类型数据的JSON文档。

下面是一个使用QJsonObject、QJsonArray、QJsonValue创建JSON文档的例子:

QJsonObject person;
person.insert("name", "John");
person.insert("age", 32);

QStringList fruits = {"apple", "banana", "orange"};
QJsonArray fruitArray;
for(auto fruit : fruits){
    fruitArray.append(fruit);
}

person.insert("fruits", fruitArray);

QJsonDocument doc(person);

通过以上代码,我们创建了一个JSON文档,它包含了名为“name”和“age”的两个键值对,以及一个名为“fruits”的键值对,它的值是一个QJsonArray类型,包含了3个字符串元素。

2、读取JSON数据

我们可以使用QJsonObject、QJsonArray、QJsonValue这三个类,来快速读取JSON文档中的对应数据。

下面是一个使用QJsonObject、QJsonArray、QJsonValue读取JSON文档数据的例子:

QJsonDocument doc = QJsonDocument::fromJson(jsonText.toUtf8());
QJsonObject obj = doc.object();

QString name = obj.value("name").toString();
int age = obj.value("age").toInt();

QJsonObject score = obj.value("score").toObject();
int chineseScore = score.value("chinese").toDouble();
int mathScore = score.value("math").toDouble();
int englishScore = score.value("english").toDouble();

bool married = obj.value("married").toBool();

QJsonArray hobbies = obj.value("hobbies").toArray();
QStringList hobbyList;
for(auto hobby : hobbies){
    hobbyList.append(hobby.toString());
}

通过以上代码,我们可以快速读取JSON文档中指定键值对的值,以及从JSON数组中读取元素。

3、写入JSON数据

我们可以通过QJsonObject、QJsonArray、QJsonValue这三个类,来快速写入JSON数据。

下面是一个使用QJsonObject、QJsonArray、QJsonValue写入JSON数据的例子:

QJsonObject person;
person.insert("name", "John");
person.insert("age", 32);

QStringList fruits = {"apple", "banana", "orange"};
QJsonArray fruitArray;
for(auto fruit : fruits){
    fruitArray.append(fruit);
}

person.insert("fruits", fruitArray);

QJsonDocument doc(person);

通过以上代码,我们可以快速写入JSON文档中指定键值对的值,以及将数据写入到JSON数组中。

三、qjsondocument的使用

下面是一个完整的JSON文档读取、处理和写入的例子:

#include 
#include 
#include 
#include 
#include 

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

    //读取JSON文档
    QString jsonText = "{\"name\": \"Lily\", \"age\": 18, \"score\": {\"chinese\": 90, \"math\": 95, \"english\": 98}, \"married\": false, \"hobbies\": [\"reading\", \"traveling\", \"swimming\"]}";
    QJsonDocument doc = QJsonDocument::fromJson(jsonText.toUtf8());
    QJsonObject obj = doc.object();

    //处理JSON数据
    QString name = obj.value("name").toString();
    int age = obj.value("age").toInt();

    QJsonObject score = obj.value("score").toObject();
    int chineseScore = score.value("chinese").toDouble();
    int mathScore = score.value("math").toDouble();
    int englishScore = score.value("english").toDouble();

    bool married = obj.value("married").toBool();

    QJsonArray hobbies = obj.value("hobbies").toArray();
    QStringList hobbyList;
    for(auto hobby : hobbies){
        hobbyList.append(hobby.toString());
    }

    //写入JSON数据
    QJsonObject newScore;
    newScore.insert("chinese", chineseScore + 5);
    newScore.insert("math", mathScore + 10);
    newScore.insert("english", englishScore + 8);

    obj.insert("score", newScore);

    QJsonArray newHobbies;
    newHobbies.append("painting");
    newHobbies.append("dancing");

    obj.insert("hobbies", newHobbies);

    QJsonDocument newDoc(obj);

    qDebug() << newDoc.toJson(QJsonDocument::Compact);

    return a.exec();
}

使用以上代码,我们可以完整地读取JSON文档中的数据,对其进行相关操作,并最终将数据写入到JSON文档中。在调式窗口中,我们可以看到更新后的JSON文档内容。

四、QJsonDocument的注意事项

使用QJsonDocument时需要注意以下几点:

  • 在读取JSON文档时,一定要保证JSON数据格式正确,否则会引起读取失败。
  • QJsonDocument在存储JSON数据时,并不保证JSON数据的格式和顺序。因此,对于需要保证JSON数据格式和顺序的场合,需要自行编写相关代码。
  • qjsondocument在读取JSON数据时,会自动将数字型、逻辑型等数据类型转化为QVariant类型。因此,在进行数据读取时,需要根据具体数据类型进行相应的类型转换,以便进行相关操作。

五、总结

本文主要介绍了qjsondocument的基本用法。我们可以通过qjsondocument很方便地将JSON数据序列化和反序列化,并对其进行相关操作。在使用qjsondocument时,需要注意JSON数据格式的正确性,同时在读取数据时要进行类型转换,以便进行相关操作。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/270105.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-12-16 13:35
下一篇 2024-12-16 13:35

相关推荐

  • 深度查询宴会的文化起源

    深度查询宴会,是指通过对一种文化或主题的深度挖掘和探究,为参与者提供一次全方位的、深度体验式的文化品尝和交流活动。本文将从多个方面探讨深度查询宴会的文化起源。 一、宴会文化的起源 …

    编程 2025-04-29
  • Python下载深度解析

    Python作为一种强大的编程语言,在各种应用场景中都得到了广泛的应用。Python的安装和下载是使用Python的第一步,对这个过程的深入了解和掌握能够为使用Python提供更加…

    编程 2025-04-28
  • Python递归深度用法介绍

    Python中的递归函数是一个函数调用自身的过程。在进行递归调用时,程序需要为每个函数调用开辟一定的内存空间,这就是递归深度的概念。本文将从多个方面对Python递归深度进行详细阐…

    编程 2025-04-27
  • Spring Boot本地类和Jar包类加载顺序深度剖析

    本文将从多个方面对Spring Boot本地类和Jar包类加载顺序做详细的阐述,并给出相应的代码示例。 一、类加载机制概述 在介绍Spring Boot本地类和Jar包类加载顺序之…

    编程 2025-04-27
  • 深度解析Unity InjectFix

    Unity InjectFix是一个非常强大的工具,可以用于在Unity中修复各种类型的程序中的问题。 一、安装和使用Unity InjectFix 您可以通过Unity Asse…

    编程 2025-04-27
  • 深度剖析:cmd pip不是内部或外部命令

    一、问题背景 使用Python开发时,我们经常需要使用pip安装第三方库来实现项目需求。然而,在执行pip install命令时,有时会遇到“pip不是内部或外部命令”的错误提示,…

    编程 2025-04-25
  • 动手学深度学习 PyTorch

    一、基本介绍 深度学习是对人工神经网络的发展与应用。在人工神经网络中,神经元通过接受输入来生成输出。深度学习通常使用很多层神经元来构建模型,这样可以处理更加复杂的问题。PyTorc…

    编程 2025-04-25
  • 深度解析Ant Design中Table组件的使用

    一、Antd表格兼容 Antd是一个基于React的UI框架,Table组件是其重要的组成部分之一。该组件可在各种浏览器和设备上进行良好的兼容。同时,它还提供了多个版本的Antd框…

    编程 2025-04-25
  • 深度解析MySQL查看当前时间的用法

    MySQL是目前最流行的关系型数据库管理系统之一,其提供了多种方法用于查看当前时间。在本篇文章中,我们将从多个方面来介绍MySQL查看当前时间的用法。 一、当前时间的获取方法 My…

    编程 2025-04-24
  • 深度学习鱼书的多个方面详解

    一、基础知识介绍 深度学习鱼书是一本系统性的介绍深度学习的图书,主要介绍深度学习的基础知识和数学原理,并且通过相关的应用案例来帮助读者理解深度学习的应用场景和方法。在了解深度学习之…

    编程 2025-04-24

发表回复

登录后才能评论