javascript
JavaScript高级程序设计学习笔记第二十章--JSON
1.JSON:JavaScript Object Notation, JavaScript 對象表示法。
2.最重要的是要理解它是一種數據格式,不是一種編程語言。雖然具有相同的語法形式,但 JSON 并不從屬于 JavaScript。而且,并不是只有 JavaScript 才使用 JSON,畢竟 JSON 只是一種數據格式。很多編程語言都有針對 JSON 的解析器和序列化器。
3.語法:
JSON 的語法可以表示以下三種類型的值:
- 簡單值:使用與 JavaScript 相同的語法,可以在 JSON 中表示字符串、數值、布爾值和 null。但 JSON 不支持 JavaScript 中的特殊值 undefined。
- JavaScript 字符串與 JSON 字符串的最大區別在于, JSON 字符串必須使用雙引號(單引號會導致語法錯誤)。
- 對象:對象作為一種復雜數據類型,表示的是一組無序的鍵值對兒。而每個鍵值對兒中的值可以是簡單值,也可以是復雜數據類型的值。
- 與 JavaScript 的對象字面量相比, JSON 對象有兩個地方不一樣。首先,沒有聲明變量(JSON 中沒有變量的概念)。其次,沒有末尾的分號(因為這不是 JavaScript 語句,所以不需要分號)。再說一遍,對象的屬性必須加雙引號,這在 JSON 中是必需的。屬性的值可以是簡單值,也可以是復雜類型值。例如:
- 1 //javascript對象字面量 2 var person = { 3 name: "Nicholas", 4 age: 29 5 }; 6 //JSON變量 7 { 8 "name": "Nicholas", 9 "age": 29 10 }
- 數組:數組也是一種復雜數據類型,表示一組有序的值的列表,可以通過數值索引來訪問其中的值。數組的值也可以是任意類型——簡單值、對象或數組。
- JSON 數組沒有變量和分號,例如:
- 1 //JavaScript 中的數組字面量 2 var values = [25, "hi", true]; 3 4 //JSON表示數組 5 [25, "hi", true]
- JSON 不支持變量、函數或對象實例
?
解析與序列化:
JSON 之所以流行,更重要的一個原因是,可以把JSON 數據結構解析為有用的 JavaScript 對象。
JSON 對象有兩個方法: stringify()和 parse()。在最簡單的情況下,這兩個方法分別用于把JavaScript 對象序列化為 JSON 字符串和把 JSON 字符串解析為原生 JavaScript 值。
序列化:
例如:
1 var book = { 2 title: "Professional JavaScript", 3 authors: [ 4 "Nicholas C. Zakas" 5 ], 6 edition: 3, 7 year: 2011 8 }; 9 var jsonText = JSON.stringify(book);//{"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3, 10 "year":2011}在序列化 JavaScript 對象時,所有函數及原型成員都會被有意忽略,不體現在結果中。此外,值為undefined 的任何屬性也都會被跳過。
實際上, JSON.stringify()除了要序列化的 JavaScript 對象外,還可以接收另外兩個參數,這兩個參數用于指定以不同的方式序列化 JavaScript 對象。第一個參數是個過濾器,可以是一個數組,也可以是一個函數;第二個參數是一個選項,表示是否在 JSON 字符串中保留縮進。
如果過濾器參數是數組,那么 JSON.stringify()的結果中將只包含數組中列出的屬性。例如:
?
如果第二個參數是函數,行為會稍有不同。傳入的函數接收兩個參數,屬性(鍵)名和屬性值。根據屬性(鍵)名可以知道應該如何處理要序列化的對象中的屬性。屬性名只能是字符串,而在值并非鍵值對兒結構的值時,鍵名可以是空字符串。例如:
?
JSON.stringify()方法的第三個參數用于控制結果中的縮進和空白符。如果這個參數是一個數值,那它表示的是每個級別縮進的空格數。例如:
1 //每個級別縮進 4 個空格 2 var book = { 3 "title": "Professional JavaScript", 4 "authors": [ 5 "Nicholas C. Zakas" 6 ], 7 edition: 3, 8 year: 2011 9 }; 10 var jsonText = JSON.stringify(book, null, 4);保存在 jsonText 中的字符串如下所示:
1 { 2 "title": "Professional JavaScript", 3 "authors": [ 4 "Nicholas C. Zakas" 5 ], 6 "edition": 3, 7 "year": 2011 8 }//要 9 傳入有效的控制縮進的參數值,結果字符串就會包含換行符。(只縮進而不換行意義不大。)最大縮進空格數為 10,所有大于 10 的值都會自動轉換為 10。?
toJSON()方法:
自定義序列化的需求。
?
假設把一個對象傳入 JSON.stringify(),序列化該對象的順序如下:
- 如果存在 toJSON()方法而且能通過它取得有效的值,則調用該方法。否則,返回對象本身。
- 如果提供了第二個參數,應用這個函數過濾器。傳入函數過濾器的值是第(1)步返回的值。
- 對第(2)步返回的每個值進行相應的序列化。
- 如果提供了第三個參數,執行相應的格式化。
?
解析:
?
將 JSON 字符串直接傳遞給 JSON.parse()就可以得到相應的 JavaScript 值。例如,使用下列代碼就可以創建與 book 類似的對象:?var bookCopy = JSON.parse(jsonText);?
JSON.parse()方法也可以接收另一個參數,該參數是一個函數,接收兩個參數,一個鍵和一個值,而且都需要返回一個值。
?
轉載于:https://www.cnblogs.com/yangxiaoguai132/p/5190478.html
總結
以上是生活随笔為你收集整理的JavaScript高级程序设计学习笔记第二十章--JSON的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT 1065 A+B and C (
- 下一篇: JavaScript GetAbsoul