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...