JSON是javascript的子類,也是作為更好的互聯網傳輸結構化數據格式逐漸取代XML,因此要理解JSON,重要的是理解它是一種數據格式,不是一種編程語言。 語法 由於JSON是數據格式,所以沒有變數的概念,同時鍵值必須使用雙引號。 JSON的stringify與parse方法(序列化與解序) ...
JSON是javascript的子類,也是作為更好的互聯網傳輸結構化數據格式逐漸取代XML,因此要理解JSON,重要的是理解它是一種數據格式,不是一種編程語言。
語法
//javascript var object = { "name":"lihua", "age":"20", "gender":undefined } //JSON { "name":"lihua", "age":"20", }
由於JSON是數據格式,所以沒有變數的概念,同時鍵值必須使用雙引號。
JSON的stringify與parse方法(序列化與解序)
早期的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相同