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