JSON是javascript的子類,也是做爲更好的互聯網傳輸結構化數據格式逐漸取代XML,所以要理解JSON,重要的是理解它是一種數據格式,不是一種編程語言。
javascript
語法java
//javascript var object = { "name":"lihua", "age":"20", "gender":undefined } //JSON { "name":"lihua", "age":"20", }
因爲JSON是數據格式,因此沒有變量的概念,同時鍵值必須使用雙引號。編程
JSON的stringify與parse方法(序列化與解序)json
早期的JSON解析器基本上都使用了eval()函數,可是可能會執行惡意代碼(eval函數能夠解析,解釋並返回js對象。ECMASCRIPT 5再後來規範了JSON行爲,定義了全局對象JSON,並添加了兩個JSON方法:stringify()和parse()。數組
var person = { name:"lihua", age:"18", hobby:[ "basketball", "badminton" ], action:function(){ alert("help") } } var jsonText = JSON.stringify(book) //{"name":"lihua","age":"18","hobby":["basketball","badminton"]} var jsText = JSON.parse(jsonText);
在序列化時,函數與原型對象成員都將被忽略(JSON只接受兩種複雜類型對象與數組),值爲undefined的屬性值也會被跳過。編程語言
序列化選項與結構化選項函數
var person = { name:"lihua", age:"18", hobby:[ "basketball", "badminton" ] } //stringify第二個參數爲過濾項 var jsonText1 = JSON.stringify(person,["name","hobby"]); //{"name":"lihua","hobby":["basketball","badminton"]} var jsonText2 = JSON.stringify(person,function(key,value){ switch(key){ case "name": return "zhoujielun"; case "age": return 17; case "hobby": return value.join(",") default: return value } }); //{"name":"zhoujielun","age":17,"hobby":"basketball,badminton"} //stringify第三個參數爲字符串縮進 var jsonText3 = JSON.stringify(person,null,"--"); // { // --"name": "lihua", // --"age": "18", // --"hobby": [ // ----"basketball", // ----"badminton" // --] // }//JSON.parse與stringify相同