日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript高级程序设计学习笔记第二十章--JSON

發布時間:2023/12/2 javascript 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()的結果中將只包含數組中列出的屬性。例如:

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", "edition"]);//{"title":"Professional JavaScript","edition":3}

?

如果第二個參數是函數,行為會稍有不同。傳入的函數接收兩個參數,屬性(鍵)名和屬性值。根據屬性(鍵)名可以知道應該如何處理要序列化的對象中的屬性。屬性名只能是字符串,而在值并非鍵值對兒結構的值時,鍵名可以是空字符串。例如:

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, function(key, value){ 10 switch(key){ 11 case "authors": 12 return value.join(",") 13 case "year": 14 return 5000; 15 case "edition": 16 return undefined; 17 default: 18 return value; 19 } 20 });

?

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。