摘要:語法語法可以表示三種類型的值簡單值使用與相同的語法,可以在中表示字符串數值布爾值和。對象對象作為一種復雜數據類型,表示的是一組無序的鍵值對兒。如果字符串長度超過了個,結果中將只出現前個字符。
JSON 語法
JSON語法可以表示三種類型的值
簡單值:使用與 JavaScript 相同的語法,可以在 JSON 中表示字符串、數值、布爾值和 null 。但 JSON 不支持 JavaScript 中的特殊值 undefined 。
對象:對象作為一種復雜數據類型,表示的是一組無序的鍵值對兒。而每個鍵值對兒中的值可以是簡單值,也可以是復雜數據類型的值。
數組:數組也是一種復雜數據類型,表示一組有序的值的列表,可以通過數值索引來訪問其中的值。數組的值也可以是任意類型——簡單值、對象或數組。
簡單值最簡單的JSON數據形式,數值5,字符串“Hello world”
JavaScript字符串與JSON字符串最大區別在于,JSON字符串必須使用雙引號
布爾值和null也是有效的JSON形式
對象//JavaScript對象 var object = { "name": "Nicholas", "age": 29 }; //JSON對象 { "name": "Nicholas", "age": 29 } //JSON中對象嵌入對象 { "name": "Nicholas", "age": 29, "school": { "name": "Merrimack College", "location": "North Andover, MA" } }數組
JSON數組沒有變量和分號
[ { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 3, year: 2011 }, { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 2, year: 2009 }, { "title": "Professional Ajax", "authors": [ "Nicholas C. Zakas", "Jeremy McPeak", "Joe Fawcett" ], edition: 2, year: 2008 }, { "title": "Professional Ajax", "authors": [ "Nicholas C. Zakas", "Jeremy McPeak", "Joe Fawcett" ], edition: 1, year: 2007 }, { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 1, year: 2006 } ]解析與序列化 JSON對象
早期的JSON解析器基本上就是使用JavaScript的eval()函數
JSON對象有兩個方法:stringify()和parse(),在最簡單情況下,兩個方法分別用于把JavaScript對象序列化為JSON字符串和把JSON字符串解析為原生JavaScript值
var book = { title: "Professional JavaScript", authors: [ "Nicholas C. Zakas" ], edition: 3, year: 2011 }; var jsonText = JSON.stringify(book); //得到的結果為 {"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3, "year":2011} //反向操作 var bookCopy = JSON.parse(jsonText);序列化選項
JSON.stringify() 除了要序列化的 JavaScript 對象外,還可以接收另外兩個參數,這兩個參數用于指定以不同的方式序列化 JavaScript 對象。第一個參數是個過濾器,可以是一個數組,也可以是一個函數;第二個參數是一個選項,表示是否在 JSON 字符串中保留縮進。
var book = { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 3, year: 2011 }; var jsonText = JSON.stringify(book, ["title", "edition"]); //結果為 {"title":"Professional JavaScript","edition":3} //結果為undefined的例子 var book = { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 3, year: 2011 }; var jsonText = JSON.stringify(book, function(key, value){ switch(key){ case "authors": return value.join(",") case "year": return 5000; case "edition": return undefined; default: return value; } }); //結果為 {"title":"Professional JavaScript","authors":"Nicholas C. Zakas","year":5000}
JSON.stringify() 方法的第三個參數用于控制結果中的縮進和空白符。如果這個參數是一個數值,那它表示的是每個級別縮進的空格數
var book = { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 3, year: 2011 }; var jsonText = JSON.stringify(book, null, 4); //結果如下 { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], "edition": 3, "year": 2011 }
如果縮進參數是一個字符串而非數值,則這個字符串將在 JSON 字符串中被用作縮進字符(不再使用空格)縮進字符串最長不能超過 10 個字符長。如果字符串長度超過了 10 個,結果中將只出現前 10 個字符。
var jsonText = JSON.stringify(book, null, " - -"); //結果如下 { --"title": "Professional JavaScript", --"authors": [ ----"Nicholas C. Zakas" --], --"edition": 3, --"year": 2011 }
toJson()方法,返回其自身的JOSN數據格式
var book = { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 3, year: 2011, toJSON: function(){ return this.title; } }; var jsonText = JSON.stringify(book)解析選項
JSON.parse()方法也可以接收另一個參數,該參數是一個函數,將在每個鍵值對上調用
var book = { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 3, year: 2011, releaseDate: new Date(2011, 11, 1) }; var jsonText = JSON.stringify(book); var bookCopy = JSON.parse(jsonText, function(key, value){ if (key == "releaseDate"){ return new Date(value); } else { return value; } }); alert(bookCopy.releaseDate.getFullYear())
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98058.html
錯誤處理與調試 錯誤處理 try-catch語句 try{ //可能會導致錯誤的代碼 }catch(error){ //在錯誤發生時怎么處理 } 發生錯誤時可以顯示瀏覽器給出的信息 try{ window.someNonexistentFunction(); }catch(error){ alert(error.message); } 在try-catch語句中是可選的,但...
摘要:當代碼在一個環境中執行時,會創建變量對象的一個作用域鏈。作用域鏈的用途,是保證對執行環境有權訪問的所有變量和函數的有序訪問。這樣,一直延續到全局執行環境全局執行環境的變量對象始終都是作用域鏈中的最后一個對象。 變量、作用域和內存問題 基本類型和引用類型的值 基本類型值指的是簡單的數據段,而引用類型值值那些可能由多個值構成的對象。 定義基本類型值的引用和引用類型值的方法是類似的,創建...
摘要:基本概念語法區分大小寫,中的一切變量函數名和操作符都區分大小寫。要將一個值轉換成對應的值,可以調用類型包括整數和浮點數值,基本數值字面量格式是十進制整數,除了十進制外還有八進制十六進制。八進制第一位必須是,十六進制第一位必須是。 基本概念 語法 區分大小寫,ECMAScript中的一切(變量、函數名和操作符)都區分大小寫。函數名不能使用typeof,因為它是一個關鍵字,但typeOf...
摘要:對象的核心對象是,它表示瀏覽器的一個實例。而和則表示該容器中頁面視圖區的大小。在中,與返回相同的值,即視口大小而非瀏覽器窗口大小。第三個參數是一個逗號分隔的設置字符串,表示在新窗口中都顯示哪些特性。這應該是用戶打開窗口后的第一個頁面 BOM window對象 BOM的核心對象是window,它表示瀏覽器的一個實例。在瀏覽器中,window對象有雙重角色,它既是通過JavaScript訪...
摘要:匿名函數可以用來模仿塊級作用域來避免這個問題這里是塊級作用域代碼定義并立即調用了一個匿名函數,將函數聲明包含在一對圓括號中,表示它實際上是一個函數表達式,而緊隨其后的另一對圓括號會立即調用這個函數。 函數表達式 遞歸 遞歸函數是在一個函數通過名字調用自身的情況下構成的 function factrial(num){ if(num
閱讀 2040·2023-04-25 14:50
閱讀 2919·2021-11-17 09:33
閱讀 2623·2019-08-30 13:07
閱讀 2849·2019-08-29 16:57
閱讀 916·2019-08-29 15:26
閱讀 3560·2019-08-29 13:08
閱讀 2003·2019-08-29 12:32
閱讀 3397·2019-08-26 13:57