版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、JSON簡介JSON(JavaScriptObjectNotation)是一種輕量級的數(shù)據(jù)交換格式。易于人閱讀和編寫。同時(shí)也易于機(jī)器解析和生成。它基于JavaScriptProgrammingLanguage,StandardJSON采用完全獨(dú)立于語言的文本格C,C+,C#,Java,JavaScript,Perl,ECMA-2623rdEdition式,但是也使用了類似于Python等)。這些特性使-December1999的一個(gè)子集。C語言家族的習(xí)慣(包括JSON成為理想的數(shù)據(jù)交換語言。JSON建構(gòu)于兩種結(jié)構(gòu):對象,即“名稱/值”對的集合(Acollectionofname/valuepa
2、irs)。一個(gè)對象可以包含多個(gè)“名稱/值”對,可以理解為對象的屬性。數(shù)組,值的有序列表(Anorderedlistofvalues)。其中,“名稱”是一個(gè)字符串,而“值”可以是多種數(shù)據(jù)類型,包括:字符串、數(shù)字、布爾值、null值、對象、數(shù)組。由此可見,JSON中數(shù)組和對象之間是可以相互嵌套的。一個(gè)JSON文檔被解釋為一個(gè)“值”,這個(gè)值的類型可以是上面列出的任何類型。這些都是常見的數(shù)據(jù)結(jié)構(gòu)。事實(shí)上大部分現(xiàn)代計(jì)算機(jī)語言都以某種形式支持它們。這使得一種數(shù)據(jù)格式在同樣基于這些結(jié)構(gòu)的編程語言之間交換成為可能。JSON具有以下這些形式:對象是一個(gè)無序的“名稱/值對”集合。一個(gè)對象以“”(左括號)開始,“”
3、(右括號)結(jié)束。每個(gè)“名稱”后跟一個(gè)“:”(冒號);“名稱/值對”之間使用“,”(逗號)分隔。數(shù)組是值(value)的有序集合。一個(gè)數(shù)組以“”(左中括號)開始,“”(右中括號)結(jié)束。值之間使用“,”(逗號)分隔。array1-0皿&-o值(valued可以是雙引號括起來的字符串(string)、數(shù)值(number)、true、false、nullD對象(object)或者數(shù)組(array)。這些結(jié)構(gòu)可以嵌套。value字符串(string)是由雙引號包圍的任意數(shù)量Unicode字符的集合,使用反斜線轉(zhuǎn)義。一個(gè)字符(character)即一個(gè)單獨(dú)的字符串(characterstring)。字符串
4、(string)與C或者Java的字符串非常相似。數(shù)值(numberfl也與C或者Java的數(shù)值非常相似。除去一些編碼細(xì)節(jié)。除去未曾使用的八進(jìn)制與十六進(jìn)制格式??瞻卓梢约尤氲饺魏畏栔g,但將被解析器過濾掉,不會(huì)出現(xiàn)在最終的解析結(jié)果中。Jsoncpp編程接口Jsoncpp是一個(gè)使用C+語言實(shí)現(xiàn)的面向?qū)ο蟮膉son庫,以靜態(tài)庫的形式提供,使用非常簡單。Jsoncpp提供的接口中有3個(gè)核心類:Reader、Writer、Value。Reader類負(fù)責(zé)從字符串或者輸入流中加載JSON文檔,并進(jìn)行解析,生成代表JSON文檔的Value對象。Writer類負(fù)責(zé)將內(nèi)存中的Value對象轉(zhuǎn)換成JSON文檔,
5、輸出到文件或者是字符串中。Wlue類的對象代表一個(gè)JSON值,既可以代表一個(gè)文檔,也可以代表文檔中一個(gè)值。如同JSON中定義的“值”一樣,Value是遞歸的。解析JSON文檔解析一個(gè)JSON文檔的大致過程如下:/生命頂級Value對象Json:Valueroot;/讀取文檔:Std:stringstrdoc=readFromFile(.);/聲明Reader對象Json:Reader_reader;/解析json文檔_reader.paser(strdoc,root);/從root中提取數(shù)據(jù),基本模式如下函數(shù)所示,其中PARAMout只是抽象的占位符,代表用來保存從Value中提取的數(shù)據(jù)的對象
6、,并不是一個(gè)實(shí)際實(shí)現(xiàn)的類。GetValueFromTree(PARAMout,Json:Value&value)switch(value.type()caseJson:nullValue:out.outvalue(null);break;caseJson:intValue:out.outvalue(value.asInt();break;caseJson:uintValue:out.outvalue(value.asUInt();break;caseJson:realValue:out.outvalue(value.asDouble();break;caseJson:stringValue:o
7、ut.outvalue(value.asString().c_str();break;caseJson:booleanValue:break;out.outvalue(value.asBool();break;caseJson:arrayValue:intsize=value.size();/數(shù)組類型,使用數(shù)字下標(biāo)作為索引遍歷所有元素for(intindex=0;indexsize;+index)printValueTree(out,valueindex);break;caseJson:objectValue:/對象類型,其成員被保存在一個(gè)map里面,使用name作為索引進(jìn)行查找Json:Va
8、lue:Membersmembers(value.getMemberNames();/遍歷所有的name,查找值for(Json:Value:Members:iteratorit=members.begin();it!=members.end();+it)conststd:string&name=*it;printValueTree(out,valueindex);break;default:break;不同定義的JSON文檔,保存不同的數(shù)據(jù),解析之后的數(shù)據(jù)也需要使用不同的數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)。比如如下結(jié)構(gòu)體:StructuserIntid;Stringname;StructInthomeserve
9、r;Intvistserver;serverinfo;Intskillids3;可使用如下定義的JSON文檔表示:“Type”:“USER_INFO”,“Data”:“id”:1,“name”:“spring”,“server”:“homeserver”:1001,“vistserver”:1003,“skillids”:1,2,3從內(nèi)存中創(chuàng)建ValueDO在需要將內(nèi)存數(shù)據(jù)轉(zhuǎn)換為文本進(jìn)行輸出。所以從內(nèi)存中創(chuàng)建表示的數(shù)據(jù)結(jié)構(gòu)都需要定義一個(gè)JSON時(shí)就需要從內(nèi)存中創(chuàng)建一個(gè)Value對象也是常用的操作,所有需要轉(zhuǎn)化為BooltoJson(Json:Value&value)Value對象,然后再轉(zhuǎn)化為
10、JSON文檔toJson成員函數(shù):內(nèi)部實(shí)現(xiàn)模式如果是一個(gè)簡單的Value值,如布爾、數(shù)值、空值、字符串等,則直接使用構(gòu)造函數(shù)創(chuàng)建Value。如:Value(datatype)如果要?jiǎng)?chuàng)建一個(gè)對象類型的Value,首先使用Valueroot(ValueTypetype=objectValue)聲明一個(gè)空的類型為對象的Value對象。然后使用類似于roottype”=“USER_INFO的表達(dá)式,往root中添加屬性(key/valueiDD如果要?jiǎng)?chuàng)建一個(gè)數(shù)組類型的Value,首先使用Valueroot(ValueTypetype=arrayValueD聲明一個(gè)空的類型為數(shù)組的ValueDOD然后使
11、用root.append(Value&)成員,在數(shù)組的末尾追加一個(gè)值,或者使用rootindex來訪問數(shù)組的元素。如果index值超出了當(dāng)前數(shù)組的長度,那么將會(huì)在數(shù)組末尾追加一個(gè)元素,并返回這個(gè)元素的引用。要?jiǎng)?chuàng)建代表如下JSON000ValueDO:“Type”:“USER_INFO”,“Data”:“id”:1,name”:“spring”,server”:homeserver”:1001,vistserver”:1003,skillids”:1,3,5需要如下代碼:/聲明object類型的對象,根對象string轉(zhuǎn)化為Data子對象ValueValueroot(objectValue);/
12、添加Type屬性這里隱含自動(dòng)類型轉(zhuǎn)換,將Root“Type”=“USER_INFO”;ValueData(objectValue);/下面創(chuàng)建Data“id”=1;Data“name”=“spring”;Value_server(objectValue);_server“homeserver”=1001;_server“vistserver”=1003;Data“server”=_server;Value_skillids(objectValue);_skillids.append(1);_skillids.append(3);_skillids.append(3);Data“skillids”=_skillid
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度浙江省公共營養(yǎng)師之四級營養(yǎng)師提升訓(xùn)練試卷A卷附答案
- 2024年度浙江省公共營養(yǎng)師之二級營養(yǎng)師能力測試試卷B卷附答案
- 2024年度海南省公共營養(yǎng)師之三級營養(yǎng)師過關(guān)檢測試卷A卷附答案
- 一年級下冊體育教學(xué)評估方案
- 高三第二學(xué)期學(xué)科教學(xué)計(jì)劃
- 食品安全索賠報(bào)告范文
- 企業(yè)知識管理與創(chuàng)新制度
- 懸空作業(yè)管理制度
- 項(xiàng)目組織與管理制度
- 餐飲單位餐飲服務(wù)食品安全管理制度
- 2023年上海英語高考卷及答案完整版
- 西北農(nóng)林科技大學(xué)高等數(shù)學(xué)期末考試試卷(含答案)
- 金紅葉紙業(yè)簡介-2 -紙品及產(chǎn)品知識
- 《連鎖經(jīng)營管理》課程教學(xué)大綱
- 《畢淑敏文集》電子書
- 頸椎JOA評分 表格
- 員工崗位能力評價(jià)標(biāo)準(zhǔn)
- 定量分析方法-課件
- 朱曦編著設(shè)計(jì)形態(tài)知識點(diǎn)
- 110kV變電站工程預(yù)算1
- 某系統(tǒng)安全安全保護(hù)設(shè)施設(shè)計(jì)實(shí)施方案
評論
0/150
提交評論