摘要:語法語法可以表示三種類型的值簡單值使用與相同的語法,可以在中表示字符串?dāng)?shù)值布爾值和。對象對象作為一種復(fù)雜數(shù)據(jù)類型,表示的是一組無序的鍵值對兒。如果字符串長度超過了個,結(jié)果中將只出現(xiàn)前個字符。
JSON 語法
JSON語法可以表示三種類型的值
簡單值:使用與 JavaScript 相同的語法,可以在 JSON 中表示字符串、數(shù)值、布爾值和 null 。但 JSON 不支持 JavaScript 中的特殊值 undefined 。
對象:對象作為一種復(fù)雜數(shù)據(jù)類型,表示的是一組無序的鍵值對兒。而每個鍵值對兒中的值可以是簡單值,也可以是復(fù)雜數(shù)據(jù)類型的值。
數(shù)組:數(shù)組也是一種復(fù)雜數(shù)據(jù)類型,表示一組有序的值的列表,可以通過數(shù)值索引來訪問其中的值。數(shù)組的值也可以是任意類型——簡單值、對象或數(shù)組。
簡單值最簡單的JSON數(shù)據(jù)形式,數(shù)值5,字符串“Hello world”
JavaScript字符串與JSON字符串最大區(qū)別在于,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" } }數(shù)組
JSON數(shù)組沒有變量和分號
[ { "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()函數(shù)
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); //得到的結(jié)果為 {"title":"Professional JavaScript","authors":["Nicholas C. Zakas"],"edition":3, "year":2011} //反向操作 var bookCopy = JSON.parse(jsonText);序列化選項
JSON.stringify() 除了要序列化的 JavaScript 對象外,還可以接收另外兩個參數(shù),這兩個參數(shù)用于指定以不同的方式序列化 JavaScript 對象。第一個參數(shù)是個過濾器,可以是一個數(shù)組,也可以是一個函數(shù);第二個參數(shù)是一個選項,表示是否在 JSON 字符串中保留縮進。
var book = { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 3, year: 2011 }; var jsonText = JSON.stringify(book, ["title", "edition"]); //結(jié)果為 {"title":"Professional JavaScript","edition":3} //結(jié)果為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; } }); //結(jié)果為 {"title":"Professional JavaScript","authors":"Nicholas C. Zakas","year":5000}
JSON.stringify() 方法的第三個參數(shù)用于控制結(jié)果中的縮進和空白符。如果這個參數(shù)是一個數(shù)值,那它表示的是每個級別縮進的空格數(shù)
var book = { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], edition: 3, year: 2011 }; var jsonText = JSON.stringify(book, null, 4); //結(jié)果如下 { "title": "Professional JavaScript", "authors": [ "Nicholas C. Zakas" ], "edition": 3, "year": 2011 }
如果縮進參數(shù)是一個字符串而非數(shù)值,則這個字符串將在 JSON 字符串中被用作縮進字符(不再使用空格)縮進字符串最長不能超過 10 個字符長。如果字符串長度超過了 10 個,結(jié)果中將只出現(xiàn)前 10 個字符。
var jsonText = JSON.stringify(book, null, " - -"); //結(jié)果如下 { --"title": "Professional JavaScript", --"authors": [ ----"Nicholas C. Zakas" --], --"edition": 3, --"year": 2011 }
toJson()方法,返回其自身的JOSN數(shù)據(jù)格式
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()方法也可以接收另一個參數(shù),該參數(shù)是一個函數(shù),將在每個鍵值對上調(diào)用
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())
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/98058.html
錯誤處理與調(diào)試 錯誤處理 try-catch語句 try{ //可能會導(dǎo)致錯誤的代碼 }catch(error){ //在錯誤發(fā)生時怎么處理 } 發(fā)生錯誤時可以顯示瀏覽器給出的信息 try{ window.someNonexistentFunction(); }catch(error){ alert(error.message); } 在try-catch語句中是可選的,但...
摘要:當(dāng)代碼在一個環(huán)境中執(zhí)行時,會創(chuàng)建變量對象的一個作用域鏈。作用域鏈的用途,是保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。這樣,一直延續(xù)到全局執(zhí)行環(huán)境全局執(zhí)行環(huán)境的變量對象始終都是作用域鏈中的最后一個對象。 變量、作用域和內(nèi)存問題 基本類型和引用類型的值 基本類型值指的是簡單的數(shù)據(jù)段,而引用類型值值那些可能由多個值構(gòu)成的對象。 定義基本類型值的引用和引用類型值的方法是類似的,創(chuàng)建...
摘要:基本概念語法區(qū)分大小寫,中的一切變量函數(shù)名和操作符都區(qū)分大小寫。要將一個值轉(zhuǎn)換成對應(yīng)的值,可以調(diào)用類型包括整數(shù)和浮點數(shù)值,基本數(shù)值字面量格式是十進制整數(shù),除了十進制外還有八進制十六進制。八進制第一位必須是,十六進制第一位必須是。 基本概念 語法 區(qū)分大小寫,ECMAScript中的一切(變量、函數(shù)名和操作符)都區(qū)分大小寫。函數(shù)名不能使用typeof,因為它是一個關(guān)鍵字,但typeOf...
摘要:對象的核心對象是,它表示瀏覽器的一個實例。而和則表示該容器中頁面視圖區(qū)的大小。在中,與返回相同的值,即視口大小而非瀏覽器窗口大小。第三個參數(shù)是一個逗號分隔的設(shè)置字符串,表示在新窗口中都顯示哪些特性。這應(yīng)該是用戶打開窗口后的第一個頁面 BOM window對象 BOM的核心對象是window,它表示瀏覽器的一個實例。在瀏覽器中,window對象有雙重角色,它既是通過JavaScript訪...
摘要:匿名函數(shù)可以用來模仿塊級作用域來避免這個問題這里是塊級作用域代碼定義并立即調(diào)用了一個匿名函數(shù),將函數(shù)聲明包含在一對圓括號中,表示它實際上是一個函數(shù)表達式,而緊隨其后的另一對圓括號會立即調(diào)用這個函數(shù)。 函數(shù)表達式 遞歸 遞歸函數(shù)是在一個函數(shù)通過名字調(diào)用自身的情況下構(gòu)成的 function factrial(num){ if(num
閱讀 2025·2023-04-25 14:50
閱讀 2907·2021-11-17 09:33
閱讀 2611·2019-08-30 13:07
閱讀 2838·2019-08-29 16:57
閱讀 908·2019-08-29 15:26
閱讀 3540·2019-08-29 13:08
閱讀 1990·2019-08-29 12:32
閱讀 3383·2019-08-26 13:57