黑馬程序員C語(yǔ)言教程:-CC++培訓(xùn)專家:教你快速搞定Qt下的Json文件使用_第1頁(yè)
黑馬程序員C語(yǔ)言教程:-CC++培訓(xùn)專家:教你快速搞定Qt下的Json文件使用_第2頁(yè)
黑馬程序員C語(yǔ)言教程:-CC++培訓(xùn)專家:教你快速搞定Qt下的Json文件使用_第3頁(yè)
黑馬程序員C語(yǔ)言教程:-CC++培訓(xùn)專家:教你快速搞定Qt下的Json文件使用_第4頁(yè)
黑馬程序員C語(yǔ)言教程:-CC++培訓(xùn)專家:教你快速搞定Qt下的Json文件使用_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、傳智播客C£+®訓(xùn)專家:教你快速搞定Qt下的Json文件使用JSON的全稱是" JavaScript Object Notation,意思是 JavaScrip僅寸象表示法, 它是一種基于文本,獨(dú)立于語(yǔ)言的輕量級(jí)數(shù)據(jù)交換格式。JSON解析器和JSON庫(kù)支持許多不同的編程語(yǔ)言,目前非常多的編程語(yǔ)言 都支持JSON接下來傳智播客C/C+增訓(xùn)專家為大家介紹一下Qt下 的Json的使用。Json的兩種結(jié)構(gòu)JSONW兩種表示結(jié)構(gòu),對(duì)象和數(shù)組。對(duì)象結(jié)構(gòu)以”大括號(hào)開始,以”大括號(hào)結(jié)束。中間部分由0或多個(gè)以"分隔的“ key伏鍵字)/valued)”對(duì)構(gòu)成,關(guān)鍵字和值之

2、間以”: ”分隔,語(yǔ)法結(jié)構(gòu)如代碼。key1:value1,key2:value2,true,false,null,其中 關(guān)鍵字是字符串,而 值可以是字符串,數(shù)值,對(duì)象或數(shù)組。數(shù)組結(jié)構(gòu)以”開始,” ”結(jié)束。中間由0 或多個(gè)以”, ”分隔的值列表組成,語(yǔ)法結(jié)構(gòu)如代碼。true,123,“ hello, world”數(shù)組中的元素值類型可以相同也可不同。Json格式的文件在使用的時(shí)候是十分靈活的,其中數(shù)組和對(duì)象之間也是可以相互嵌套的,大家可以按照自己的實(shí)際需求來定義成對(duì)應(yīng)的格式。例如: "firstName":"John" , "lastName&qu

3、ot;:"Doe" , "firstName":"Anna" , "lastName":"Smith" , "firstName":"Peter" , "lastName": "Jones" Qt5中JSON的生成與解析Qt5新增加了處理 JSON的類,與XML類庫(kù)類似,均以 QJson開頭,在 QtCore 模塊中,不需要額外引入其它模塊。Qt5 新增加六個(gè)相關(guān)類:類類說明QJsonDocument讀寫JSON文檔

4、QJsonObject封裝JSON對(duì)象QJsonArray封裝JSON數(shù)組QJsonValue封裝 JSON 值QJsonObject:iterator用于遍歷 QJsonObject 的 STL風(fēng)格的非const遍歷器QJsonParseError 報(bào)告JSON處理過程中出現(xiàn)的錯(cuò)誤需要大家著重掌握的類為前四個(gè)。QJsonDocument該Json文檔類主要是把json格式的數(shù)據(jù)解析為Qt中的Json文檔對(duì)象,所有我們?cè)谑褂迷擃愔?,需要先把?shù)據(jù)準(zhǔn)備好:解析Json1 .使用QFile對(duì)象加載指定的Json格式文件a) Q (" D:myjson.json )彳b) (QIODevi

5、ce二ReadWrite);2 .通過QFile類中的read方法將文件數(shù)據(jù)讀到內(nèi)存a) QByteArray json = file.readAll ();3. QJsonDocument:fromJson()可以由 QByteArray 對(duì)象構(gòu)造一QJsonDocument對(duì)象,用于我們的讀寫操作a) QJsonDocument jsDoc;b) jsDoc = QJsonDocument:fromJson(json.toUtf8();QJsonObject生成 json 對(duì)象因?yàn)?json 對(duì)象為鍵值對(duì),所以我們可以使用QJsonObject 類的insert 方法,向該類對(duì)象中插入數(shù)據(jù)

6、。1 .創(chuàng)建空的QJsonObjec附象a) QJsonObject ob;j2 . 使用 insert 方法向空對(duì)象中插入數(shù)據(jù)a) obj.insert( na“me” ,Ja“ck” );b) obj.insert(“ age” , 26);c) obj.insert(“ isboy ” , true);解析 json 對(duì)象1 .首先需要先得到一個(gè)QJsonDocument對(duì)象,然后判斷該對(duì)象是 否是一個(gè)json對(duì)象,使用isObject ()方法2 .使用QJsonDocument類的object ()方法可以將json文檔對(duì)象 轉(zhuǎn)換為Json對(duì)象。3 .可以通過QJsonObjec附象

7、的key值得到其value值,訪問方式 為 QJsonValue value = objkey4 .使用QJsonValu聯(lián)的成員方法將value值轉(zhuǎn)換為實(shí)際的數(shù)據(jù)類型。QJsonDocument parse_doucmen;tparse_doucment = QJsonDocument:fromJson(byte_array);if(parse_doucment.isObject()QJsonObject obj = parse_doucment.object();if(obj.contains("name")QJsonValue name_value = obj&quo

8、t;name"if(name_value.isString()QString name = name_value.toString();QJsonArray生成 Json1 .創(chuàng)建Json數(shù)組:a) QJsonArray json;2 .使用QJsonArray類的insert方法插入數(shù)據(jù):a) json.insert(0, QString("Qt");b) json.insert(1, QString("version");c) json.insert(2, true);3 .創(chuàng)建Json文檔對(duì)象:a) QJsonDocument docum

9、ent;4 .將初始化完成的json數(shù)組對(duì)象設(shè)置給Json文檔對(duì)象a) document.setArray(json);5 .將json文檔對(duì)象轉(zhuǎn)換為 QByteArray對(duì)象a) QByteArray byte_array = document.toJson();生成的文件格式:"Qt","version",true解析 Json1 .首先需要先得到一個(gè)QJsonDocument對(duì)象,然后判斷該對(duì)象是 否是一個(gè)json數(shù)組,使用isArray ()方法。2 .使用QJsonDocument類的array ()方法可以將json文檔對(duì)象 轉(zhuǎn)換為Json對(duì)

10、象。3 .可以通過QJsonArray對(duì)象遍歷得到其中的每個(gè) value值,訪問 方式與遍歷普通數(shù)組的方式相同。4 .使用QJsonValu聯(lián)的成員方法將value值轉(zhuǎn)換為實(shí)際的數(shù)據(jù)類型。QJsonDocument parse_doucmen;tparse_doucment = QJsonDocument:fromJson(byte_array);if(parse_doucment.isArray()QJsonArray array = parse_doucment.array();int size = array.size();for(int i=0; i<size; +i) QJso

11、nValue value = array.at(i);if(value.isString() QString name = value.toString();else if(value.isBool()bool flag = value.toBool();QJsonValue在使用json對(duì)象或json數(shù)組對(duì)象得到對(duì)應(yīng)的value之后,該value值并不是最終的數(shù)據(jù)類型而是一個(gè) QJsonValue類型的屬性,我們必須通過該對(duì)象判斷該類型的實(shí)際類型,然后在將其轉(zhuǎn)換為對(duì)應(yīng)的數(shù)據(jù)類型:類型判斷相關(guān)的成員方法:bool isArray() const / 是否為 json 數(shù)組bool isBool

12、() const / 是否為布爾類型/ 是否為浮點(diǎn)類型/ 是否為空/ 是否為 json 對(duì)象/ 是否為字符串類型bool isDouble() constbool isNull() constbool isObject() constbool isString() const數(shù)據(jù)類型轉(zhuǎn)換相關(guān)成員方法:QJsonArray toArray(const QJsonArray &defaultValue) constQJsonArray toArray() const / 轉(zhuǎn)為為 json 數(shù)組bool toBool(bool defaultValue = false) const / to

13、 布爾類型double toDouble(double defaultValue = 0) constint toInt(int defaultValue = 0) constQJsonObject toObject(const QJsonObject &defaultValue) constQJsonObject toObject() const / 轉(zhuǎn)換為 json 對(duì)象QString toString(const QString &defaultValue = QString() const生成 Json1 .創(chuàng)建JsonObject對(duì)象或數(shù)組(再次以對(duì)象舉例)a) QJsonObject json;2 . 往 json 對(duì)象中添加鍵值對(duì)a) json.insert("name", QString("Qt");b) json.insert("version", 5);c) json.insert("windows", true);3 .創(chuàng)建Json文檔對(duì)象a) QJsonDocument document;4 .將Json對(duì)象或數(shù)組設(shè)置給json文檔對(duì)象a) document.setObject(json); / 數(shù)組:setArray( array)5 .將文檔對(duì)象轉(zhuǎn)換為Q

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論