什么是json逾雄?
JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式鸠窗,采用完全獨(dú)立于語言的文本格式,是理想的數(shù)據(jù)交換格式盈电。
而且JSON是 JavaScript 原生格式精拟,js處理json不需要任何特殊的API或工具包燎斩,非常適合于服務(wù)器與 JavaScript 的交互。
為什么需要使用json蜂绎?
XML也是一種數(shù)據(jù)交換格式栅表,為什么還需要json呢?
XML雖然可以作為跨平臺的數(shù)據(jù)交換格式师枣,但是在JS(JavaScript的簡寫)中處理XML非常不方便怪瓶,同時(shí)XML標(biāo)記比數(shù)據(jù)多,增加了交換產(chǎn)生的流量践美,而JSON沒有附加的任何標(biāo)記洗贰,在JS中可作為對象處理,所以我們更傾向于選擇JSON來交換數(shù)據(jù)陨倡。
簡單一點(diǎn)說敛滋,非特殊情況下的數(shù)據(jù)交換,使用XML就像是大炮打蚊子玫膀,而json就是電蚊拍矛缨,使用起來簡單高效,自然受到追捧帖旨。
不過值得一提的是箕昭,json只是替代了xml的80%的功能,也就是說XML也是不可或缺的解阅。
json的格式
json 語法是 JavaScript 對象表示語法的子集落竹。
- 數(shù)據(jù)在鍵值對中
- 數(shù)據(jù)由逗號分隔
- 花括號"{ }"保存對象
- 方括號"[ ]"保存數(shù)組
json有兩種基礎(chǔ)結(jié)構(gòu),對象和數(shù)組货抄,由于它們可以互相嵌套述召,所以不用擔(dān)心不能表示復(fù)雜的數(shù)據(jù)(其實(shí)json就可以理解為js的對象與數(shù)組互相嵌套的結(jié)構(gòu))。
- 對象:對象在js中表示為"{ }"括起來的內(nèi)容蟹地,數(shù)據(jù)結(jié)構(gòu)為 {key:value,key:value,...}的鍵值對的結(jié)構(gòu)积暖。在面向?qū)ο蟮恼Z言中,key為對象的屬性怪与,value為對應(yīng)的屬性值夺刑,所以很容易理解,屬性值的類型可以是數(shù)字、字符串遍愿、數(shù)組存淫、對象。
- 數(shù)組:數(shù)組:數(shù)組在js中是中括號"[ ]"括起來的內(nèi)容沼填,數(shù)據(jù)結(jié)構(gòu)為
[{ 對象1 },{ 對象2 },key:value, ...]
桅咆,取值方式和所有語言中一樣,使用索引獲取坞笙,字段值的類型可以是 數(shù)字岩饼、字符串、數(shù)組羞海、對象忌愚。
js解析json
讀和寫JSON都有兩種方法,分別是利用”.”操作符和“[key]”的方式却邓。
var json={
1:"i am value",//數(shù)字做關(guān)鍵子,不建議,因?yàn)檫@樣使用json.1讀取會出錯(cuò)硕糊,只能用json["1"]讀取
"123":"value",//這個(gè)也只能用json["123"]讀取
"cc":"value",
"animal":{ //對象結(jié)構(gòu) json對象
"type1":"dog",
"type2":"cat"
},
"people" : [//數(shù)組結(jié)構(gòu) json對象
{"id":"1","name":"方世玉"},
{"id":"2","name":"張君寶"}
]
}
}
- 讀取數(shù)據(jù)
function read(){
console.log(json.cc);//輸出鍵為“cc”所對應(yīng)的值
console.log(json.animal.type1);//輸出鍵為"type1"所對應(yīng)的值“dog”
//也可以這樣用
console.log(json.people[1]);//輸出值“方世玉”
}
- 寫入數(shù)據(jù)
json.code="hello world";
- 修改數(shù)據(jù)
json.code="hello json";
- 刪除數(shù)據(jù)
delete json.code;
- 遍歷數(shù)據(jù)
用for循環(huán)就是
字符串類型轉(zhuǎn)換為json對象
這里提供兩種方式:
- eval方式解析:
var json = eval('(' + str + ')');
<ul> <li>注意:str左右加了括號腊徙,原因在于json(這里的str字符串)是以”{ }”的方式來開始以及結(jié)束的简十,在JS中,它會被當(dāng)成一個(gè)語句塊來處理撬腾,所以必須強(qiáng)制性的將它轉(zhuǎn)換成對象螟蝙。要不然js會認(rèn)為執(zhí)行了一個(gè)空的語句"{ }"。</li></ul><ul><li>當(dāng)然上面的情況也是因?yàn)閑val會執(zhí)行str內(nèi)部代碼民傻,其實(shí)一般不用這種古老的方法胰默,容易出問題。</li></ul> - JSON.parse()解析:
JSON.parse(str);
<ul><li>這里也有一個(gè)值得注意的地方漓踢,這里使用的str一定要嚴(yán)格符合json標(biāo)準(zhǔn)(key和value都需要用雙引號包括)牵署,不然會解析錯(cuò)誤。</li></ul>