JSON是javascript的一個子集,利用js中的一些兒模式來表示結構化數據。不是隻有javascript才使用JSON,JSON是一種數據格式,不少編程語言都有針對JSON的解析器和序列化器。
javascript
JSON的語法能夠表示一下三種類型的值:
html
簡單值:能夠在JSON中表示字符串、數值、布爾值和null ; 但不支持js中的特殊值 undefined java
對象:表示的是一組有序的鍵值對兒編程
數組:表示的是一組有序的值得列表json
簡單值:數組
-數值(整數或者浮點數 編程語言
-字符串(必須在引號裏)函數
-布爾值spa
-nullcode
對象值:
javascript中的對象字面量:
var person = { name:"Zhou", age:29 };
json中的對象要求必須給屬性加引號,以下:
{ "name":"Zhou", "age":29 }
JSON中沒有變量的概念,其次末尾不用分號。屬性的值能夠是簡單值,也能夠是複雜類型值,能夠在對象中嵌入對象:
{ "name":"Zhou", "age":29, "school":{ "name":"XXX College", "address":"XXXXXXXXXX" } }
數組:
JSON數組採用的及時JS裏的數組字面量形式
[ 25, "age", true ]
一樣沒有變量和分號。
JSON對象有兩個方法:stringify() 和 parse(),這兩個方法 分別用於把javascript對象序列化爲JSON字符串解析爲javascript值。
var people = { name:"小明", age:25, friends:[ "小紅", "小蘭" ] } var json = JSON.stringify(people); alert(json); // 返回結果:{"name":"小明","age":25,"friends":["小紅","小蘭"]}
上面例子JSON.stringify()把一個javascript對象序列化爲一個JSON字符串,而後將它保存在變量json中。默認請款下,輸出的JSON字符串不包含任何空格字符或縮進。
在序列化javascript對象是,全部函數及原型成員都會被有意忽略,值爲undefined的任何屬性也會被跳過。
將JSON字符串直接傳遞給JSON.parse()就能夠獲得相應的javascript的值。
JSON除了序列化javascript對象外,還能夠接受多個參數。
第二個參數能夠是個數組,也能夠是函數:
var people = { name:"小明", age:25, friends:[ "小紅", "小蘭" ] } var json = JSON.stringify(people,["name","friends"]); alert(json); //返回結果:{"name":"小明","friends":["小紅","小蘭"]}
若是第二個參數是函數:
var people = { name:"小明", age:25, friends:[ "小紅", "小蘭" ] } var json = JSON.stringify(people,function(key,value){ switch(key){ case "name": return "小軍"; case "age": return 20; case "friends": return null; default: return value; } }); alert(json); //返回結果:{"name":"小軍","age":20,"friends":null}
第三個參數用於控制結果中的縮進和空白符。若是這個參數是一個數值,那它表示縮進的空格數,最大縮進空格數爲10,全部大於10的值都會自動轉換爲10。只要傳入有效的數值,結果字符串就會包含換行符。
若是縮進參數是字符串而非數值,則這個字符將在JSON字符串中被用做縮進字符,縮進字符串最長不能超過10個字符長,超過10個結果中將出現前10個字符。
var people = { name:"小明", age:25, friends:[ "小紅", "小蘭" ] } var json = JSON.stringify(peopl,null,10); //var json = JSON.stringify(peopl,null,"hello"); alert(json);
閱讀拓展連接: