Qt中的JSON解析与处理

健身生活志 2019-04-27 ⋅ 79 阅读

介绍

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于将数据从服务器传输到客户端。在Qt中,可以通过简单的API来解析和处理JSON数据。本文将介绍在Qt中如何解析和处理JSON数据。

JSON的基本结构

JSON数据由键值对集合构成,其中键是字符串,值可以是字符串、数字、布尔值、数组、对象等。下面是一个JSON数据的示例:

{
    "name": "张三",
    "age": 25,
    "isStudent": true,
    "hobbies": ["篮球", "游泳", "旅行"],
    "address": {
        "province": "广东",
        "city": "深圳"
    }
}

Qt中的JSON解析类

Qt提供了一个名为QJsonDocument的类,用于解析和处理JSON数据。该类位于QJsonDocument头文件中,需要添加以下头文件:

#include <QJsonDocument>

解析JSON数据

可以使用QJsonDocumentfromJson()函数将JSON数据解析为QJsonDocument对象。下面是一个解析JSON数据并输出其中的值的示例:

QByteArray jsonData = "{\"name\":\"张三\",\"age\":25,\"isStudent\":true,\"hobbies\":[\"篮球\",\"游泳\",\"旅行\"],\"address\":{\"province\":\"广东\",\"city\":\"深圳\"}}";

QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData);

if (!jsonDoc.isNull()) {
    if (jsonDoc.isObject()) {
        QJsonObject jsonObj = jsonDoc.object();
        QString name = jsonObj["name"].toString();
        int age = jsonObj["age"].toInt();
        bool isStudent = jsonObj["isStudent"].toBool();
        QJsonArray hobbies = jsonObj["hobbies"].toArray();
        QJsonObject address = jsonObj["address"].toObject();

        qDebug() << "姓名:" << name;
        qDebug() << "年龄:" << age;
        qDebug() << "是否学生:" << isStudent;

        qDebug() << "爱好:";
        for (const QJsonValue &hobby : hobbies) {
            qDebug() << hobby.toString();
        }

        qDebug() << "地址:" << address["province"].toString() << address["city"].toString();
    }
}

创建JSON数据

可以使用QJsonDocumentfromVariant()函数将QVariant类型的数据转换为JSON数据。下面是一个创建JSON数据并将其转换为字符串的示例:

QJsonObject jsonObj;
jsonObj["name"] = "李四";
jsonObj["age"] = 30;
jsonObj["isStudent"] = false;

QJsonArray hobbies;
hobbies.append("足球");
hobbies.append("听音乐");
hobbies.append("电影");
jsonObj["hobbies"] = hobbies;

QJsonObject address;
address["province"] = "北京";
address["city"] = "北京";
jsonObj["address"] = address;

QJsonDocument jsonDoc(jsonObj);
QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Compact);

QString jsonString = QString::fromUtf8(jsonData);

qDebug() << jsonString;

总结

使用Qt中的QJsonDocument类可以方便地解析和处理JSON数据。通过fromJson()函数可以将JSON数据解析为QJsonDocument对象,通过toObject()toArray()等函数可以获取其中的键值对或数组。通过fromVariant()函数可以将QVariant类型的数据转换为JSON数据。

希望本文对你理解和使用Qt中的JSON解析与处理有所帮助!


全部评论: 0

    我有话说: