JSON是JavaScript Object Notation的縮寫,它是一種數據交換格式。編程
在JSON出現以前,你們一直用XML來傳遞數據。由於XML是一種純文本格式,因此它適合在網絡上交換數據。XML自己不算複雜,可是,加上DTD、XSD、XPath、XSLT等一大堆複雜的規範之後,任何正常的軟件開發人員碰到XML都會感受頭大了,最後你們發現,即便你努力鑽研幾個月,也未必搞得清楚XML的規範。網絡
終於,在2002年的一天,道格拉斯·克羅克福特(Douglas Crockford)同窗爲了拯救深陷水深火熱同時又被某幾個巨型軟件企業長期愚弄的軟件工程師,發明了JSON這種超輕量級的數據交換格式。架構
道格拉斯同窗長期擔任雅虎的高級架構師,天然鍾情於JavaScript。他設計的JSON其實是JavaScript的一個子集。在JSON中,一共就這麼幾種數據類型:編程語言
number
徹底一致;true
或false
;string
;null
;Array
表示方式——[]
;{ ... }
表示方式。以及上面的任意組合。spa
而且,JSON還定死了字符集必須是UTF-8,表示多語言就沒有問題了。爲了統一解析,JSON的字符串規定必須用雙引號""
,Object的鍵也必須用雙引號""
。設計
因爲JSON很是簡單,很快就風靡Web世界,而且成爲ECMA標準。幾乎全部編程語言都有解析JSON的庫,而在JavaScript中,咱們能夠直接使用JSON,由於JavaScript內置了JSON的解析。code
把任何JavaScript對象變成JSON,就是把這個對象序列化成一個JSON格式的字符串,這樣纔可以經過網絡傳遞給其餘計算機。對象
若是咱們收到一個JSON格式的字符串,只須要把它反序列化成一個JavaScript對象,就能夠在JavaScript中直接使用這個對象了。blog
讓咱們先把小明這個對象序列化成JSON格式的字符串: ip
1 var xiaoming = { 2 name: '小明', 3 age: 14, 4 gender: true, 5 height: 1.65, 6 grade: null, 7 'middle-school': '\"W3C\" Middle School', 8 skills: ['JavaScript', 'Java', 'Python', 'Lisp'] 9 }; 10 11 JSON.stringify(xiaoming); // '{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}'
要輸出得好看一些,能夠加上參數,按縮進輸出:
1 JSON.stringify(xiaoming, null, ' ');
結果:
1 { 2 "name": "小明", 3 "age": 14, 4 "gender": true, 5 "height": 1.65, 6 "grade": null, 7 "middle-school": "\"W3C\" Middle School", 8 "skills": [ 9 "JavaScript", 10 "Java", 11 "Python", 12 "Lisp"
13 ] 14 }
第二個參數用於控制如何篩選對象的鍵值,若是咱們只想輸出指定的屬性,能夠傳入Array
: