title: JSON
date: 2016-11-8
tags: JavaScript編程
JSON(JavaScript Object Notation, JavaScript對象表示法)。json
JSON 利用了 JS 中的一些模式來表示結構化數據。數組
JSON 是一種數據格式,而不編程語言。數據結構
JSON 能夠表示三種類型的值,簡單值,對象,數組。編程語言
對於簡單值,在JS中,JSON 能夠表示,字符串
,數值
,布爾值
,null
,可是不支持JS 中的特殊值 undefined。函數
JSON 不支持變量,函數或對象實例。code
//JSON 中的對象 { "name":"Jack", "age":29, "school":{ "name":"huaxin school", "location":"china" } } //JS 中的對象 var object = { "name":"Macil", "age":29 };
在 JSON 中表示對象時必須給對象的屬性添加雙引號。此外,沒有聲明變量,其次,末尾沒有分號。對象
JSON 中數組採用的是 JS 中數組的字面量形式。ip
[24,"hello",false]
一樣的,JSON 中數組也沒有變量好分號。ci
把數字和對象結合起來,即可以構成複雜的數據集合。
JSON 數據結構能夠被解析爲有用的 JS 對象,這也是 JSON 成爲 Web 服務開發中交互數據的事實標準的重要緣由。
JSON 對象有兩個方法: stringify() 和 parse()。
stringify():把 JS 對象序列化爲 JSON 字符串
parse():把 JSON 字符串解析爲原生的 JS 值
JSON.stringify()
除了要序列化的 JS 對象外,還能夠接受另外兩個參數。須要添加的第二個參數是過濾器,能夠是數組(數組過濾器)或者函數(函數過濾器)。第三個參數表示,是否在 JSON 字符串中保留縮進。
若是過濾器參數是數組,那麼 JSON.stringify()
的結果中將只包含數組中列出的屬性。
var books = { "title":"挪威的森林", "authors":["村上春樹"], "edition":3, "year":2011 }; var jsonText = JSON.stringify(books,["title","edition"]); console.log(jsonText); //{"title":"挪威的森林","edition":3}
函數過濾器中的函數接受兩參數:屬性名
和 屬性值
,而屬性名只能是字符串。
函數過濾器會根據傳入的鍵來決定返回的結果。但如果函數返回了 undefined
那麼相應的屬性會被忽略。
var books = { "title":"挪威的森林", "authors":["村上春樹","芥川龍之介","松下幸之助","太宰治"], "edition":3, "year":2011 }; var jsonText = JSON.stringify(books,function(key,value){ switch(key){ case "authors": return value.join(","); case "year": return 50000; case "edition": return undefined; default : return value; } }); console.log(jsonText); //{"title":"挪威的森林","authors":"村上春樹,芥川龍之介,松下幸之助,太宰治","year":50000}
JSON.stringify()
的第上參數能夠爲數字或者任意字符。分別表示要縮進的空格數和用來表示的縮進字符串(再也不使用空格)
var jsonText = JSON.stringify(book,null,"---");
與 JSON.stringigy()
方法對應,JSON.parse()
能夠接受一個函數做爲還原函數(reviver),它也一樣接收兩參數,一個鍵和一個值。
若是還原函數返回 undefined
則表示要在結果中刪除相應的鍵。
在將日期對象轉換爲 Date 對象時,便常用到還原函數了。
var books = { "title":"挪威的森林", "authors":["村上春樹","芥川龍之介","松下幸之助","太宰治"], "edition":3, "year":2011, "releaseDate":new Date(2016,11,8) }; var jsonText = JSON.stringify(books,function(key,value){ switch(key){ case "authors": return value.join(","); case "year": return 50000; case "edition": return undefined; default : return value; } }); var bookCopy = JSON.parse(jsonText,function(key,value){ if (key == "releaseDate"){ return new Date(value); } else { return value; } })