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