QT解析json檔案

2021-10-23 18:28:01 字數 3224 閱讀 6335

#include

qstring filename(「3.json」);

先判定檔案是否存在,在開啟檔案(是否正確開啟)

if

(!filename.

exists()

)if(!filename.

open

(qiodevice::readonly)

)

qbytearray alldata = file.

readall()

;

關閉檔案
file.

close()

;

需要包含標頭檔案

#include

#include

#include

生成**sondocument物件:

**sonparseerror parsejsonerr;

**sondocument jsondoc = **sondocument::

fromjson

(alldata,

&parsejsonerr)

;

是否解析錯誤:

if(!

(parsejsonerr.error == **sonparseerror::noerror)

)

轉成**sonobject物件:

**sonobject res=jsondoc.

object()

;

解析的json檔案中若有陣列,則新增標頭檔案:

#include

從這個**son物件中取值的方式可以通過operator["對應的鍵"]或者成員函式**sonobject::value("對應的鍵")的方式。

而得到的值是**sonvalue型別的。這個類有tostring(),toarray()等方法來轉換值。

例如,這樣的json檔案:

可以通過foreach的方式對**son物件進行遍歷:

for each (

auto var in res)

結果:(上面刪了一些點)

這一篇是關於**sonvalue類和其成員方法的一些介紹

具體的解析方式:

for each (

auto val in res)

}else

//qdebug() << sonarray;}}

}

用了todouble()方法將**sonvalue轉成double,用toarray()轉成**sonarray。

另外還有判斷的成員函式:isarray()、isdouble()等等。

結果:

剛才說的轉換方法:

總結下具體步驟:(**sonvalue可以通過函式**sonvalue::toobject()轉換為**sonobject物件)

先用qfile類開啟*.json檔案並讀出所有內容到qbytearray中,用到函式qfile::open(qiodevice::readonly)qbytearray qfile::readall();

用讀出的內容初始化**sondocument類,用到函式**sondocument::fromjson();

**sondocument類的成員函式**sondocument::object()得到為乙個具體的物件**sonobject

通過對物件**sonobject進行操作,可以直接獲取第一級的一對:鍵-值。獲取的值型別為**sonvalue型別,它包含判斷值型別和轉換值型別的成員函式。比如**sonobject jsonobject;

**sonvalue keyvalue =  jsonobject[

"name"];

// 或者jsonobject.value("name")

其中,keyvalue的值就是json檔案下對應的value值。可以通過成員函式tostring()、todouble()、toint()等來轉換值型別。

當物件**sonobject裡面是一組陣列(即有符號[ ])時,需要將獲取的對應鍵的值,轉化為json陣列**sonarray,可以直接用函式**sonobject.value()或者函式**sonobject.take()來獲取對應鍵的值。

**sonvalue arrayvalue = jsonobject.

value

(qstringliteral

("recoveryprimarynode"))

;

獲取對應鍵的值後將其複製給json陣列**sonarray,然後用函式**sonarray::at(i)來獲取該陣列下的第i個元素,可以用迴圈for(int i=0;i當獲取某個鍵對應的值後,可以通過函式**sonvalue::toobject()將該值轉換為物件,然後物件就可以像一級鍵-值來獲取對應鍵的值。

Qt解析JSON陣列

json 陣列在中括號中書寫,以逗號分隔。json 中陣列值必須是合法的 json 資料型別 字串,數字,物件,陣列,布林值或 null 比如 qt解析方式 qbytearray array sonparseerror error sondocument document sondocument f...

JSON庫解析json檔案

cocoa 下json開源的類庫有很多,其中jsonkit庫是非常簡單易用而且效率又比較高的。解析 舉例 import jsonkit.h 假設 strjson 是網路上接收到的 json 字串,nsstring strjson bage 3,sound def.nsdictionary resul...

讀取本地json檔案,解析json

data.json 檔案同目錄下 import json 引入模組 count 1 開啟乙個json檔案 data open data.json encoding utf 8 轉換為python物件 strjson json.load data flag false lockflag false w...