這兩天在學習Angular,順便複習了一下JSON的使用方法。。 雖然感受JSON很簡單,可是每次想描述一下的時候又經常找不到詞形容,仍是練的太少。。javascript
此次再也不是用本子記筆記,而是用word進行了整理,用Brackets來練習代碼,邊記邊練,之後會放棄使用本子來記,發覺抄寫了兩本本子以後,不少內容仍是沒記住。 java
JavaScript Object Notation js對象表示法json
它是輕量級的文本數據交換格式,獨立於語言*,具備自我描述性,更容易理解,json使用js語法來描述數據對象,可是json仍然獨立於語言和平臺,json解釋器和json庫支持不少不一樣的編譯語言,目前很是多的動態編譯語言都支持json。數組
JSON文本格式在語法上與建立js對象的代碼相同,服務器
因爲這種類似性,無需解析器,js程序可以使用eval()函數,用json數據來生成原生的js對象函數
數據在 名稱/值 對中 包含在雙引號之中工具
數據由逗號分隔學習
大括號保存對象url
中括號保存數組spa
例如json:"name" : "菜鳥教程" 等價於js中這樣書寫: name = "菜鳥教程";
能夠是 數字,字符串,邏輯值,數組,對象,null
數字: { 「age」 : 30 }
對象: { "name":"菜鳥教程" , "url":"www.runoob.com" }
數組:
Sites是包含了三個對象的數組,每個對象有本身的name和url屬性
由於 JSON 使用 JavaScript 語法,因此無需解析器就能處理js中的json。
這樣就能夠訪問sites中的每一個對象的屬性。 Sites[0].name;
也能夠對json數據進行修改。
對象語法 {「name」:」runoob」 , 「alexa」:1000,」site」null}
Json對象使用在大括號中書寫,能夠包含多個鍵值對,key必須是字符串,value是合法的json數據類型,key和value用冒號分割,每一個鍵值對中間用逗號分割。
可使用 . 來訪問對象的值,也可使用中括號來訪問對象的值,中括號之間是key,必須是字符串
可使用for-in 來循環對象屬性:
var myObj = { "name":"runoob", "alexa":10000, "site":null };
for (x in myObj) { document.getElementById("demo").innerHTML += x + "<br>"; }
循環對象的屬性時,使用中括號[]來訪問屬性的值:
由於循環的時候x實際上指的是key,是字符串,因此不能直接用 . 來訪問key的值
JSON 對象中能夠包含另一個 JSON 對象:
一樣能夠修改對象對應屬性的值,而且能夠用delete來刪除對象的屬性
使用數組最爲json對象:
Var oJson = [「xxx」,」xxx」,」xxx」];
數組必須在中括號中書寫,數組中的值必須是合法的json數據類型(數值,字符串,布朗,對象,數組或者null)
可使用索引來訪問數組還有數組,對象中的數組。
也可使用for-in 來循環數組
JSON經常使用於與服務端交換數據,在接受服務器數據時通常是字符串
咱們可使用JSON.parse()方法將數據轉化爲js對象
語法: JSON.parse(text[,reviver]) text必須是一個有效地JSON字符串
在線工具檢測:https://c.runoob.com/front-end/53。
Reviver可選,一個轉換結果的函數,將爲對象的每一個成員調用此函數。
若是從服務端接收的是數組的 JSON 數據,則 JSON.parse 會將其轉換爲 JavaScript 數組
JSON不能儲存Date對象,若是你要儲存Date對象,須要將其轉化爲字符串,以後再講字符串轉化爲Date對象,時間對象
咱們能夠啓用JSON的第二個參數 reviver,一個轉化結果的函數,對象的每一個成員調用該函數
JSON不容許包含函數,可是你能夠把函數做爲字符串儲存,而後再用eval()將字符串解析爲函數。
JSON 一般用於與服務端交換數據。
在向服務器發送數據時通常是字符串。
咱們可使用 JSON.stringify() 方法將 JavaScript 對象轉換爲字符串
簡單來講就是會把js對象轉化爲等價的JSON字符串
var foo = {bar:"new property",baz:3};
var jsonString = JSON.stringify(foo);
console.log(jsonString);//{"bar":"new property","baz":3}
語法:
JSON.stringify(value[, replacer[, space]])
value:
必需, 一個有效的 JSON 字符串。
replacer:
可選。用於轉換結果的函數或數組。
該參數能夠是多種類型,若是是一個函數,則它能夠改變一個javascript對象在字符串化過程當中的行爲, 若是是一個包含 String 和 Number 對象的數組,則它將做爲一個白名單.只有那些鍵存在域該白名單中的鍵值對纔會被包含進最終生成的JSON字符串中.若是該參數值爲null或者被省略,則全部的鍵值對都會被包含進最終生成的JSON字符串中
space:
可選,文本添加縮進、空格和換行符,若是 space 是一個數字,則返回值文本在每一個級別縮進指定數目的空格,若是 space 大於 10,則文本縮進 10 個空格。space 有可使用非數字,如:\t。
例以下面:
最後一個參數,space能夠用來dump對象,將複雜的對象直觀清晰地顯示出來,例如:
結果很是清晰~!
JSON 不能存儲 Date 對象。
JSON.stringify() 會將全部日期轉換爲字符串。
JSON 不容許包含函數,JSON.stringify() 會刪除 JavaScript 對象的函數,包括 key 和 value。
咱們能夠在執行 JSON.stringify() 函數前將函數轉換爲字符串來避免以上問題的發生