javascript
cjson读取json文件_JSON格式介绍和使用cJSON解析 | 学步园
轉(zhuǎn)自:http://hi.baidu.com/xp2xp3/item/c1ff4f1c2ed37adf9c778ab9
在閱讀本文之前,請(qǐng)先閱讀下《Rss Reader實(shí)例開發(fā)之系統(tǒng)設(shè)計(jì)》一文。
Rss Reader實(shí)例開發(fā)中,進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)交換時(shí)主要使用到了兩種數(shù)據(jù)格式:JSON與XML。本文主要介紹JSON格式的簡單概念及JSON在Rss Reader中的應(yīng)用,XML格式的使用將在下一篇文章做介紹。
JSON簡介:
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,可以把JSON的結(jié)構(gòu)理解成無序的、可嵌套的key-value鍵值對(duì)集合,這些key-value鍵值對(duì)是以結(jié)構(gòu)體或數(shù)組的形式來組織的。同一級(jí)的key-value鍵值對(duì)之間是用一個(gè)“,”(逗號(hào))隔開,每個(gè)key-value鍵值對(duì)是由一個(gè)key后面緊接一個(gè)“:”(冒號(hào)),冒號(hào)后面是這個(gè)key對(duì)應(yīng)的value。Key是一個(gè)word,由大小寫字母、下劃線及數(shù)字組成,可以由雙引號(hào)封閉,也可以不加雙引號(hào);而value的取值集為:Number、Boolean(true或false)、null、String、Object及Array,如圖一:
(圖一)
1、Number:數(shù)值,包括整形數(shù)與浮點(diǎn)數(shù),如:123、0.83、-2.7e10。其結(jié)構(gòu)如圖二:
(圖二)
2、String:字符串,是以雙引號(hào)封閉起來的一串字符,使用反斜杠來轉(zhuǎn)義,如:\\、\n等,JSON中字符串的概念與C/C++或者JAVA語言里的字符串概念差不多,如:”abc”。其結(jié)構(gòu)如圖三:
(圖三)
3、Object:對(duì)象,也可理解成一個(gè)結(jié)構(gòu)體,是以一對(duì)大括號(hào)封閉起來的無序的key-value鍵值對(duì)集合,例如:{name:"Susan", age:27, birthday:{year:1984, month:2, day:11}};也可以寫成:{"name":"Susan", "age":27, "birthday":{"year":1984, "month":2, "day":11}};其結(jié)構(gòu)如圖四:
(圖四)
4、Array:數(shù)組,JSON的數(shù)組是一個(gè)以中括號(hào)封閉起來的value的集合,即數(shù)組內(nèi)的各個(gè)成員的數(shù)據(jù)類型可以不一樣,這一點(diǎn)就跟C/JAVA的數(shù)組概念不同了。每個(gè)value之間是由一個(gè)“,”(逗號(hào))隔開,例如:[123, abc, false, {name:mj}];其結(jié)構(gòu)如圖五:
(圖五)
關(guān)于JSON的詳細(xì)說明與教程請(qǐng)自行到網(wǎng)絡(luò)上搜索,有很多。
下面我們就來動(dòng)手寫一個(gè)例子:
{
result:true,
root:{
version:"201007091640",
channels:[
{
name:"新聞中心",
subchnls:[
{
title:"焦點(diǎn)新聞",
link:"http://news.mtc.sohu.com/news/channel/1/news.rss",
desc:"家事、國事、天下事"
},
{
title:"新聞?lì)l道",
link:"http://news.mtc.sohu.com/news/channel/2/news.rss",
desc:"讓您實(shí)時(shí)掌握國際動(dòng)態(tài)"
},
{
title:"軍事頻道",
link:"http://news.mtc.sohu.com/news/channel/3/news.rss",
desc:"軍事"
}
]
},
{
name:"體育新聞",
subchnls:[
{
title:"體育要聞匯總",
link:"http://news.mtc.sohu.com/news/channel/4/news.rss",
desc:"erewr"
},
{
title:"國際足壇",
link:"http://news.mtc.sohu.com/news/channel/5/news.rss",
desc:"werewr"
}
]
}
]
}
}
這段JSON描述了一個(gè)對(duì)象(最外層大括號(hào)包圍的部分),為了方便區(qū)分,我們就將其稱為對(duì)象A吧。對(duì)象A有兩個(gè)Item(即key-value鍵值對(duì)),一個(gè)是result,其值為true;一個(gè)是root,其值為一個(gè)對(duì)象,稱為對(duì)象B。對(duì)象B也有兩個(gè)Item,一個(gè)是version,其值為一個(gè)字串” 201007091640”;一個(gè)是channels,其值是一個(gè)數(shù)組,而數(shù)組的成員都是一個(gè)對(duì)象,每個(gè)對(duì)象又包含兩個(gè)Item,一個(gè)是name,值分別為字串"新聞中心"和"體育新聞";一個(gè)是subchnls,值都是數(shù)組,每個(gè)數(shù)組又分別有若干個(gè)成員,每個(gè)subchnls成員也都是一個(gè)對(duì)象,每個(gè)對(duì)象都有三個(gè)Item:title、link和desc。也許你看到這,已經(jīng)是一頭大汗了,不過沒關(guān)系,我們來帖張這段JSON文本對(duì)應(yīng)的結(jié)構(gòu)圖,有圖就有真相,請(qǐng)看圖六:
(圖六:黑色實(shí)線為對(duì)象,虛線為值,橙色實(shí)線為數(shù)組)
在RssReader中使用cJSON:
在RssReader中使用了開源庫cJSON來解析JSON,所以在此就介紹下cJSON的使用:
在CJSON中,一個(gè)key-value鍵值對(duì)被解析并存放在一個(gè)cJSON結(jié)構(gòu)體變量中,其value取值集為:FALSE,TRUE,NULL,NUMBER,STRING,OBJECT,ARRAY。它們分別被存放在CJSON對(duì)象的child、valuestring、valueint、valuedouble變量中,而用于判斷某個(gè)CJSON對(duì)象value的數(shù)據(jù)類型則是CJSON對(duì)象的type變量,其取值范圍與CJSON對(duì)象的value集是一一對(duì)應(yīng)的,如:cJSON_False對(duì)應(yīng)FALSE。
cJSON Types:
#define?????cJSON_False?????0
#define?????cJSON_True??????1
#define?????cJSON_NULL??2
#define?????cJSON_Number????3
#define?????cJSON_String????4
#define?????cJSON_Array?????5
#define?????cJSON_Object????6
cJSON 結(jié)構(gòu)體:
typedefstructcJSON
總結(jié)
以上是生活随笔為你收集整理的cjson读取json文件_JSON格式介绍和使用cJSON解析 | 学步园的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php7 libiconv,PHP7编译
- 下一篇: DO、DTO、BO、AO、VO、POJO