什么是json?
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,采用完全獨立于語言的文本格式,是理想的數據交換格式。
而且JSON是 JavaScript 原生格式,js處理json不需要任何特殊的API或工具包,非常適合于服務器與 JavaScript 的交互。
為什么需要使用json?
XML也是一種數據交換格式,為什么還需要json呢?
XML雖然可以作為跨平臺的數據交換格式,但是在JS(JavaScript的簡寫)中處理XML非常不方便,同時XML標記比數據多,增加了交換產生的流量,而JSON沒有附加的任何標記,在JS中可作為對象處理,所以我們更傾向于選擇JSON來交換數據。
簡單一點說,非特殊情況下的數據交換,使用XML就像是大炮打蚊子,而json就是電蚊拍,使用起來簡單高效,自然受到追捧。
不過值得一提的是,json只是替代了xml的80%的功能,也就是說XML也是不可或缺的。
json的格式
json 語法是 JavaScript 對象表示語法的子集。
- 數據在鍵值對中
- 數據由逗號分隔
- 花括號"{ }"保存對象
- 方括號"[ ]"保存數組
json有兩種基礎結構,對象和數組,由于它們可以互相嵌套,所以不用擔心不能表示復雜的數據(其實json就可以理解為js的對象與數組互相嵌套的結構)。
- 對象:對象在js中表示為"{ }"括起來的內容,數據結構為 {key:value,key:value,...}的鍵值對的結構。在面向對象的語言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,屬性值的類型可以是數字、字符串、數組、對象。
- 數組:數組:數組在js中是中括號"[ ]"括起來的內容,數據結構為
[{ 對象1 },{ 對象2 },key:value, ...]
,取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是 數字、字符串、數組、對象。
js解析json
讀和寫JSON都有兩種方法,分別是利用”.”操作符和“[key]”的方式。
var json={
1:"i am value",//數字做關鍵子,不建議,因為這樣使用json.1讀取會出錯,只能用json["1"]讀取
"123":"value",//這個也只能用json["123"]讀取
"cc":"value",
"animal":{ //對象結構 json對象
"type1":"dog",
"type2":"cat"
},
"people" : [//數組結構 json對象
{"id":"1","name":"方世玉"},
{"id":"2","name":"張君寶"}
]
}
}
- 讀取數據
function read(){
console.log(json.cc);//輸出鍵為“cc”所對應的值
console.log(json.animal.type1);//輸出鍵為"type1"所對應的值“dog”
//也可以這樣用
console.log(json.people[1]);//輸出值“方世玉”
}
- 寫入數據
json.code="hello world";
- 修改數據
json.code="hello json";
- 刪除數據
delete json.code;
- 遍歷數據
用for循環就是
字符串類型轉換為json對象
這里提供兩種方式:
- eval方式解析:
var json = eval('(' + str + ')');
<ul> <li>注意:str左右加了括號,原因在于json(這里的str字符串)是以”{ }”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成對象。要不然js會認為執行了一個空的語句"{ }"。</li></ul><ul><li>當然上面的情況也是因為eval會執行str內部代碼,其實一般不用這種古老的方法,容易出問題。</li></ul> - JSON.parse()解析:
JSON.parse(str);
<ul><li>這里也有一個值得注意的地方,這里使用的str一定要嚴格符合json標準(key和value都需要用雙引號包括),不然會解析錯誤。</li></ul>