Qt Json檔案構建與解析的簡單例項

2021-10-10 05:15:25 字數 3763 閱讀 2181

qt_json檔案讀寫的簡單例項

1、qt檔案中的json相關類的介紹

(1)**sondocument

**sondocument類提供了一種讀取和寫入json文件的方法。
**sondocument是乙個包裝完整json文件的類,它既可以從基於utf-8編碼的文字表示法,也可以從qt自己的二進位制格式中讀取和寫入這個文件。

乙個json文件可以使用**sondocument::fromjson()從基於文字的表示方式轉換為**sondocument,tojson()將其轉換回文字。該解析器非常快速和高效,並將json轉換為qt使用的二進位制表示。

可以通過 !isnull() 查詢解析後文件的有效性。可以使用isarray()和isobject()查詢乙個文件是否包含乙個陣列或乙個物件。可以使用array()或object()檢索文件中包含的陣列或物件,然後進行讀取或操作。

(2)**sonobject

**sonobject類封裝了乙個json物件。
乙個json物件是乙個鍵值對的列表,其中鍵是唯一的字串,而值則由**sonvalue表示。乙個**sonobject可以轉換為乙個qvariantmap,也可以從qvariantmap轉換為**sonobject。

你可以用size()、insert()和remove()條目查詢它的(鍵、值)對的數量,並使用標準的c++迭代器模式對其內容進行迭代。

**sonobject是乙個隱式共享類,只要不被修改,它就會與它所建立的文件共享資料。你可以通過**sondocument將物件轉換成基於文字的json。

(3)**sonvalue

**sonvalue類封裝了json中的乙個值。
json中的值可以是6種基本型別之一。json是一種儲存結構化資料的格式。它有6種基本資料型別。

bool **sonvalue::bool

double **sonvalue::double

string **sonvalue::string

array **sonvalue::array

object **sonvalue::object

null **sonvalue::null

乙個值可以代表以上任何一種資料型別。此外,**sonvalue有乙個特殊的標誌來表示未定義的值。這可以通過isundefined()來查詢。

值的型別可以用type()或isbool()、isstring()等訪問器來查詢。同樣,也可以用tobool()、tostring()等將值轉換為儲存在其中的型別。

(4)**sonarray

**sonarray類封裝了乙個json陣列。
json陣列是乙個值的列表。該列表可以通過從陣列中插入和刪除**sonvalue來操作。

乙個**sonarray可以被轉換為乙個qvariantlist。你可以使用size()、insert()和remove()來查詢它的條目數,並使用標準的c++迭代器模式對其內容進行迭代。

**sonarray是乙個隱式共享類,只要不被修改,它就會與它所建立的文件共享資料。你可以通過**sondocument將陣列轉換成基於文字的json。

2、乙個簡單例項

}

(1)構建上面的json檔案

//建立json物件

**sonobject obj;

**sonobject sub_obj;

**sonarray sub_array, sub_array2;

//向json物件插入鍵值對

sub_obj.

insert

("ip"

,**sonvalue

("192.168.1.25"))

; sub_obj.

insert

("port"

,"1234");

//向json陣列插入值

sub_array.

push_back

(**sonvalue(1

)); sub_array.

push_back

(**sonvalue(2

)); sub_array2.

push_back

(**sonvalue(3

)); sub_array2.

push_back

(**sonvalue(4

));//向子物件插入鍵值對,其中值為json陣列或json物件

sub_obj.

insert

("no"

,**sonvalue

(sub_array2));

obj.

insert

("server"

,**sonvalue

(sub_obj));

obj.

insert

("num"

,**sonvalue

(sub_array));

//轉換為json檔案物件

**sondocument doc

(obj)

;//將json檔案物件轉換為字串

qbytearray data = doc.

tojson()

;//寫入檔案

qfile file_json

("e:\\qt_code\\aircloud\\test.json");

file_json.

open

(qiodevice::readwrite)

; file_json.

write

(data)

;//關閉檔案

file_json.

close()

;

(2)解析上面的json檔案

//讀取json檔案

qfile file2_json

("e:\\qt_code\\aircloud\\test.json");

file2_json.

open

(qiodevice::readwrite)

;//json檔案讀入字串

qbytearray data = file2_json.

readall()

; file2_json.

close()

;//使用字串初始化json檔案物件

**sondocument doc = **sondocument::

fromjson

(data)

;//判斷是否是物件

if(doc.

isobject()

)//解析陣列

**sonvalue val_array = obj.

value

("num");

//vec_d存放解析出來的double陣列

qvector<

double

> vec_d;

//判斷是否是**sonvalue::array

if(val_array.

isarray()

)}}}

韌體庫檔案解析及構建工程

一 組合語言編寫的啟動檔案 stm32f103rbt6使用的是128kb的內建flash,因此,應該使用的檔案是startup stm32f10x md.s 主要作用 設定堆疊指標,pc指標,初始化中斷向量表,配置系統時鐘,呼叫c語言的 main前往c語言部分執行。二 配置系統時鐘的時鐘配置檔案 使...

json檔案的解析與儲存

一 json 1 一種輕量級的資料交換格式 2 簡潔和清晰的層次結構,易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提公升網路傳輸效率 一些合法的json的例項 1,2,3 3.14 plain text 二 解析 載入模組 讀取檔案 loads解析 載入json模組 import json ...

cJSON的構建和解析

一 cjson構建 define module num 3 int encode json cjson root cjson createobject 在根節點建立cjson物件 root cjson name list array cjson createarray 建立陣列物件 name lis...