最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt使用QJson模塊實現(xiàn)解析Json文件

 更新時間:2023年10月20日 13:59:01   作者:海碼007  
在項目開發(fā)過程中,經(jīng)常會遇到讀寫Json文件的需求,掌握Json文件的操作是基礎(chǔ)中的基礎(chǔ),下面我們就來看看如何使用QT內(nèi)置的QJson模塊解析Json文件吧

0 引言

在項目開發(fā)過程中,經(jīng)常會遇到讀寫Json文件的需求,掌握Json文件的操作是基礎(chǔ)中的基礎(chǔ)。

1 Json數(shù)據(jù)分析

要讀取的Json數(shù)據(jù)格式如下:

[
        {
            "name":"ggr",
            "info":
                {
                    "age":21,
                    "height":174
                }
        },
        {
            "name":"lbw",
            "info":
                {
                    "age":21,
                    "height":174
                }
        }
]

接下來以QJson模塊的角度,來解析這個Json數(shù)據(jù)

整個文件數(shù)據(jù)可以轉(zhuǎn)換為 QJsonDocument 類型,其中有 “[ ]” 方括號、 "{ }“花括號、” : "冒號。

  • 被 “[ ]” 方括號包圍的數(shù)據(jù)是QJsonArray數(shù)組類型。
  • 被 "{ }"花括號包圍的數(shù)據(jù)是QJsonObject對象類型。
  • " : "冒號兩側(cè)的分別是Key和Value(key : value),冒號左右有空格不影響數(shù)據(jù)讀取。

先了解四個重要的類型

  • QJsonDocument類型,指的是整個Json數(shù)據(jù)。
  • QJsonArray數(shù)組類型的元素是QJsonValue類型。
  • QJsonObject類型的元素是鍵值對,也就是 Key: Value 類型。Key 是字符串類型,Value 的類型是 QJsonValue。
  • QJsonValue類型 可以轉(zhuǎn)換成 QJsonObject 類型、int型、double型、QString類型、QJsonArray類型等基礎(chǔ)數(shù)據(jù)類型。

總結(jié):QJsonDocument 可以轉(zhuǎn)換為 QJsonArray 或QJsonObjec t類型。然后 QJsonArray 中的元素和 QJsonObject 中鍵值對的值的類型都是 QJsonValue 類型。QJsonValue 類型可以轉(zhuǎn)換成QJsonArray、QJsonObject、int、double、QString、bool等類型。(相當(dāng)于閉環(huán)了,設(shè)計的非常巧妙)

2 解析Json數(shù)據(jù)

1.首先添加一些頭文件

#include <QFile>				// 用于打開文件
#include <QJsonParseError>		// 返回錯誤信息
#include <QJsonArray>			// Json數(shù)據(jù)對象
#include <QJsonDocument>		// Json文檔對象
#include <QJsonObject>			// 普通Json對象
#include <QDebug>				// 打印數(shù)據(jù)

2.新建一個函數(shù)解析Json數(shù)據(jù)

bool ReadJson::praseJsonFile(const QString &sJsonPathFn)
{
    //---------------------------------------------------------------------------------------------
    //1.讀取磁盤中的文件
    QFile file( sJsonPathFn );
    if (!file.open(QIODevice::ReadOnly)) return false;

    QJsonParseError result;
    QJsonDocument   root_Doc = QJsonDocument::fromJson(file.readAll(), &result);    // 將文件數(shù)據(jù)格式化為JsonDocument對象
    if( result.error != QJsonParseError::NoError ) return false;                    // 數(shù)據(jù)格式錯誤就返回
    //---------------------------------------------------------------------------------------------

    QJsonArray roots = root_Doc.array();   // 將JsonDocument對象轉(zhuǎn)換為QJsonArray類型

    //---------------------------------------------------------------------------------------------
    //2.遍歷QJsonArray數(shù)組
    for (int i=0; i<roots.size(); i++)
    {
        QJsonObject root = roots.at(i).toObject();

        // 讀取name和info的值
        QString     name    = root.value("name").toString();
        QJsonObject info    = root.value("info").toObject();

        // 讀取info對象中age和height的值
        int         age     = info.value("age").toInt();
        int         height  = info.value("height").toInt();

        // 打印讀取的數(shù)據(jù)
        qDebug() << "name = " << name;
        qDebug() << "info.age = " << age;
        qDebug() << "info.height = " << height;
    }
    //---------------------------------------------------------------------------------------------

    return true;
}

其實只要掌握關(guān)鍵的函數(shù),就能看懂上面的代碼:

1.readAll()

這是將文本文件讀取成 QByteArray 類型的函數(shù)

2.QJsonDocument的fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR)函數(shù)

這是將 QByteArray 類型的字符數(shù)組轉(zhuǎn)換成 QJsonDocument 類型的函數(shù)。

3.QJsonDocument 有兩個函數(shù),分別是 object() 和 array() 函數(shù),它們可以將自己轉(zhuǎn)換成 QJsonArray 類型或者 QJsonObject 類型

使用 object() 還是 array() 函數(shù)就看Json數(shù)據(jù)最開頭的是 方括號 還是 花括號 ,本文數(shù)據(jù)是方括號開頭,所以使用的是 array() 函數(shù)。

4.QJsonArray 的 at(int index) 函數(shù),用于訪問數(shù)組索引等于 index 的元素。

QJsonObject 的 value(const QString &key) 函數(shù),用于讀取花括號中的鍵值對的值。根據(jù)key的值,讀取value的值。

5.該函數(shù)返回的是 QJsonValue 類型

QJsonValue 中的 toObject、toString、toInt、toDouble、toBool、toArray 函數(shù)用于將 QJsonValue 裝換為 QJsonObject、QString、int、double、bool、QJsonArray 類型

到此這篇關(guān)于Qt使用QJson模塊實現(xiàn)解析Json文件的文章就介紹到這了,更多相關(guān)Qt QJson解析Json內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中的long long與__int64

    C++中的long long與__int64

    這篇文章主要介紹C++中的long long與__int64,在C++ Primer當(dāng)中提到的64位的int只有l(wèi)ong long,但是在實際各種各樣的C++編譯器當(dāng)中,64位的int一直有兩種標準.一種是long long,還有一種是__int64,非主流的VC甚至還支持_int64,下面文章將介紹具體內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • 基于C語言掃雷游戲的設(shè)計與實現(xiàn)

    基于C語言掃雷游戲的設(shè)計與實現(xiàn)

    大家好,本篇文章主要講的是基于C語言掃雷游戲的設(shè)計與實現(xiàn),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 最新評論

    洪湖市| 丰顺县| 砚山县| 巧家县| 赤城县| 东平县| 独山县| 山东| 乌兰县| 囊谦县| 会泽县| 乐东| 景泰县| 青岛市| 洪雅县| 双牌县| 分宜县| 巢湖市| 开鲁县| 楚雄市| 会同县| 临泉县| 卢龙县| 通江县| 乐安县| 通榆县| 丹凤县| 景洪市| 庆安县| 台南县| 水富县| 桦南县| 绥阳县| 镇赉县| 天等县| 望奎县| 中江县| 临城县| 庆城县| 句容市| 兴仁县|