QT中关于json的相关操作

阅读数:119 评论数:0

跳转到新版页面

分类

Linux

正文

一、概述

在 Qt 中处理 JSON 数据,可以使用 QJsonDocumentQJsonObjectQJsonArray 类。

二、从文件中读取json

假设你有一个 JSON 文件 data.json,其内容如下:

{
    "name": "John Doe",
    "age": 30,
    "address": {
        "city": "New York",
        "zip": "10001"
    },
    "phoneNumbers": [
        "123-456-7890",
        "987-654-3210"
    ]
}

以下是从文件读取 JSON 数据的代码:

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

void readJsonFromFile(const QString& filePath) {
    QFile file(filePath);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qWarning() << "Cannot open file for reading:" << file.errorString();
        return;
    }

    QByteArray jsonData = file.readAll();
    file.close();

    QJsonParseError parseError;
    QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData, &parseError);

    if (parseError.error != QJsonParseError::NoError) {
        qWarning() << "JSON parse error:" << parseError.errorString();
        return;
    }

    if (!jsonDoc.isObject()) {
        qWarning() << "JSON is not an object";
        return;
    }

    QJsonObject jsonObj = jsonDoc.object();

    qDebug() << "Name:" << jsonObj["name"].toString();
    qDebug() << "Age:" << jsonObj["age"].toInt();

    QJsonObject addressObj = jsonObj["address"].toObject();
    qDebug() << "City:" << addressObj["city"].toString();
    qDebug() << "ZIP:" << addressObj["zip"].toString();

    QJsonArray phoneNumbersArray = jsonObj["phoneNumbers"].toArray();
    for (const QJsonValue& value : phoneNumbersArray) {
        qDebug() << "Phone Number:" << value.toString();
    }
}

三、向文件中写入json数据

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

void writeJsonToFile(const QString& filePath) {
    QJsonObject jsonObj;
    jsonObj["name"] = "John Doe";
    jsonObj["age"] = 30;

    QJsonObject addressObj;
    addressObj["city"] = "New York";
    addressObj["zip"] = "10001";
    jsonObj["address"] = addressObj;

    QJsonArray phoneNumbersArray;
    phoneNumbersArray.append("123-456-7890");
    phoneNumbersArray.append("987-654-3210");
    jsonObj["phoneNumbers"] = phoneNumbersArray;

    QJsonDocument jsonDoc(jsonObj);

    QFile file(filePath);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        qWarning() << "Cannot open file for writing:" << file.errorString();
        return;
    }

    file.write(jsonDoc.toJson());
    file.close();
}

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

    QString filePath = "data.json";

    // 写入 JSON 数据到文件
    writeJsonToFile(filePath);

    // 从文件读取 JSON 数据
    readJsonFromFile(filePath);

    return a.exec();
}



相关推荐