QT中的Json文件创建与解析

一、思路

        QT中JSON格式的创建和解析涉及到QJsonObject、QJsonArray、QJsonDocument这三个,分别对应json对象、json数组以及编码转换,帮助文件查阅这三个类即可知道如何使用。

二、例子

#include <QCoreApplication>

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

void writeJson()
{
    QJsonObject rootObj;
    //1.插入name字段
    rootObj.insert("name", "China");

    //2.插入info字段
    QJsonObject infoObj;

    infoObj.insert("capital", "beijing");
    infoObj.insert("asian", true);
    infoObj.insert("founded", 1949);

    rootObj.insert("info", infoObj);

    //3.插入provinces字段
    QJsonArray provincesArray;

    QJsonObject provinceSdObj;
    provinceSdObj.insert("name", "shandong");
    provinceSdObj.insert("capital", "jinan");

    QJsonObject provinceZjObj;
    provinceZjObj.insert("name", "zhejiang");
    provinceZjObj.insert("capital", "hangzhou");

    provincesArray.append(provinceSdObj);
    provincesArray.append(provinceZjObj);

    rootObj.insert("provinces", provincesArray);

    //4.将rootObj转换为JSON字符串
    QJsonDocument doc(rootObj);
    QByteArray json = doc.toJson();

    //5.1打印输出
    qDebug() << QString(json).toUtf8().data();

    //5.2将JSON字符串写入到文件
    QFile file("C:\\Users\\EDY\\Desktop\\QTtest\\JSON\\china.json");
    file.open(QFile::WriteOnly);
    file.write(json);
    file.close();
}

void fromJson()
{
    //1.读取文件
    QFile file("C:\\Users\\EDY\\Desktop\\QTtest\\JSON\\china.json");
    file.open(QFile::ReadOnly);
    QByteArray json = file.readAll();
    file.close();

    QJsonDocument doc = QJsonDocument::fromJson(json);
    if(!doc.isObject())
    {
        qDebug() << "Not an object!";
        return;
    }

    //2.开始解析
    QJsonObject obj = doc.object();
    QStringList keys = obj.keys();
    for(int i=0;i<keys.size();i++)
    {
        //获取key-value
        QString key = keys[i];
        QJsonValue value = obj.value(key);

        if(value.isBool())
        {
            qDebug() << key << ":" <<value.toBool();
        }
        else if(value.isString())
        {
            qDebug() << key << ":" <<value.toString();
        }
        else if(value.isDouble())
        {
            qDebug() << key << ":" <<value.toInt();
        }
        else if(value.isObject())
        {
            qDebug() << key << ":";

            QJsonObject infoObj = value.toObject();
            QString capital = infoObj["capital"].toString();
            bool asian = infoObj["asian"].toBool();
            int founded = infoObj["founded"].toInt();

            qDebug() << "  " << "capital" << ":" << capital;
            qDebug() << "  " << "asian" << ":" << asian;
            qDebug() << "  " << "founded" << ":" << founded;
        }
        else if(value.isArray())
        {
            qDebug() << key;

            QJsonArray provinceArray = value.toArray();

            for(int i=0;i<provinceArray.size();i++)
            {
                QJsonObject provinceObj = provinceArray[i].toObject();

                QString name = provinceObj["name"].toString();
                QString capital = provinceObj["capital"].toString();

                qDebug() << "  " << "name" << ":" << name << ", capital" << ":" << capital;
            }
        }
    }



}

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

//    writeJson();

    fromJson();

    return a.exec();
}

上述例子包含json文件的构建与解析。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用 Qt 的 QJsonDocument 类来读取 JSON 文件数据,并使用 QJsonObject 类来对 JSON 数据进行操作和排序。以下是一个示例代码,展示了如何读取 JSON 文件并按照指定的键名进行排序: ```cpp #include <QJsonDocument> #include <QFile> #include <QDebug> int main() { // 读取 JSON 文件 QFile file("data.json"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Failed to open file!"; return -1; } // 解析 JSON 数据 QByteArray jsonData = file.readAll(); QJsonDocument doc = QJsonDocument::fromJson(jsonData); QJsonObject jsonObj = doc.object(); // 对 JSON 数据进行排序 QStringList keys = jsonObj.keys(); std::sort(keys.begin(), keys.end(), Qt::CaseInsensitive); // 输出排序后的 JSON 数据 QJsonObject sortedJsonObj; foreach (const QString& key, keys) { sortedJsonObj.insert(key, jsonObj[key]); } qDebug() << QJsonDocument(sortedJsonObj).toJson(); return 0; } ``` 在上面的示例代码,我们首先读取了一个名为 "data.json" 的 JSON 文件,然后使用 QJsonDocument 类将其解析JSON 数据,并将其存储在 QJsonObject 。接着,我们使用 QStringList 类型的 keys 变量来存储 JSON 数据所有的键名,并使用 std::sort 函数对其进行排序。最后,我们创建一个新的 QJsonObject 类型的 sortedJsonObj 对象,并将排好序的 JSON 数据按照键名重新插入到 sortedJsonObj 。最后,我们使用 QJsonDocument 类的 toJson 函数将其输出到控制台。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值