javascriptObjectNotation(JSON)javascript功能核心子集_第1頁
javascriptObjectNotation(JSON)javascript功能核心子集_第2頁
javascriptObjectNotation(JSON)javascript功能核心子集_第3頁
javascriptObjectNotation(JSON)javascript功能核心子集_第4頁
javascriptObjectNotation(JSON)javascript功能核心子集_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、JavaScript Object Notation (JSON) JavaScript功能核心子集關(guān)鍵字: json JavaScript Object Notation ,以下簡稱JSON。 JSON提供了一種簡約的機(jī)制來創(chuàng)建數(shù)字和對象圖。這樣做可以降低復(fù)雜性,一般傻瓜會這樣做: 先申明一個(gè)對象數(shù)組,之后往數(shù)組里寫值。如: Javascript代碼 1. var school=new Object();  2. school.classes=new Array();  3. school.classes1="1

2、班"  4. school.classes2="2班"  5. school.classes3="3班"  var school=new Object();school.classes=new Array();school.classes1="1班"school.classes2="2班"school.classes3="3班"這樣數(shù)組里嵌對象,對象里嵌數(shù)組的方法很不美觀,也不可讀。使用JSON就簡單了。直接: Javascr

3、ipt代碼 1. school.classes=  2. 1:1班,  3. 2:2班,  4. 3:3班,  5. ;  school.classes=1:1班,2:2班,3:3班,;JSON采用了JAVA中MAP容器的做法,以“鍵:值”定義數(shù)組classes。當(dāng)然,JSON還可以定義更加復(fù)雜的對象,可以說JSON就是天生為了構(gòu)件這樣復(fù)雜對象數(shù)組的。 有的時(shí)候還可以創(chuàng)建這樣復(fù)雜的: Javascript代碼 1. var myLibraryObject=  2.

4、location:"my house",  3. keywords:"root","tedium",  4. books:  5. title:"just go",  6. authors:  7. name:"yang",age:10,  8. name:"wu",age:22  9. ,  10

5、. Date:"longDate"  11. ,  12.   13. ;  var myLibraryObject=location:"my house",keywords:"root","tedium",books:title:"just go",authors:name:"yang",age:10,name:"wu",age:22,Date:"longDate&

6、quot;,;引用對象是屬性、值對的集合。 一個(gè)對象的開始于“”,結(jié)束于“”。每一個(gè)屬性名和值間用“:”提示,屬性間用“,”分隔。 數(shù)組是有順序的值的集合。一個(gè)數(shù)組開始于"",結(jié)束于"",值之間用","分隔。值可以是引號里的字符串、數(shù)字、true、false、null,也 可以是對象或數(shù)組。這些結(jié)構(gòu)都能嵌套。 Javascript代碼 1. var myJSONObject = "bindings":   2.    

7、0;    "ircEvent": "PRIVMSG", "method": "newURI", "regex": "http:/.*",  3.         "ircEvent": "PRIVMSG", "meth

8、od": "deleteURI", "regex": "delete.*",  4.         "ircEvent": "PRIVMSG", "method": "randomURI", "regex": "random.*"

9、;  5.       6. ;  var myJSONObject = "bindings": "ircEvent": "PRIVMSG", "method": "newURI", "regex": "http:/.*", "ircEvent": "PRIVMSG", "method": &quo

10、t;deleteURI", "regex": "delete.*", "ircEvent": "PRIVMSG", "method": "randomURI", "regex": "random.*" ;上面的示例,創(chuàng)建了一個(gè)包括單獨(dú)成員”bindings”的對象,此成員包括一個(gè)含有三個(gè)對象(”ircEvent”, “method”, 與 “regex”)的數(shù)組 成員可以通過.或者下標(biāo)操作符檢索。 Javascript代碼 1

11、. myJSONObject.bindings0.method    / "newURI"  myJSONObject.bindings0.method / "newURI"為了將JSON文本轉(zhuǎn)換為對象,可以使用eval()函數(shù)。eval()函數(shù)調(diào)用JavaScript編輯器。由于JSON是JavaScript的子集,因此編譯器將正確的解析文本并產(chǎn)生對象結(jié)構(gòu)。文本必須括在括號中避免產(chǎn)生JavaScript的語法歧義。 Javascript代碼 1. var myObject&

12、#160;= eval('(' + myJSONtext + ')');  var myObject = eval('(' + myJSONtext + ')');eval函數(shù)非??焖?。它可以編譯執(zhí)行任何JavaScript程序,因此產(chǎn)生了安全性問題。當(dāng)使用可信任與完善的源代碼時(shí)才可以使用eval函 數(shù)。這樣可以更安全的使用JSON解析器。使用XMLHttpRequest的web應(yīng)用,頁面之間的通訊只允許同源,因此是可以信任的。但這卻不是完善 的。如果服務(wù)器沒有

13、嚴(yán)謹(jǐn)?shù)腏SON編碼,或者沒有嚴(yán)格的輸入驗(yàn)證,那么可能傳送包括危險(xiǎn)腳本的無效JSON文本。eval函數(shù)將執(zhí)行惡意的腳本。 使用JSON解析器可以防止此類事件。JSON解析器只能辨識JSON文本,拒絕所有腳本。提供了本地JSON支持的瀏覽器的JSON解析器將遠(yuǎn)快于eval函數(shù)。預(yù)計(jì)未來的ECMAScript標(biāo)準(zhǔn)將支持本地JSON。 Javascript代碼 1. var myObject = JSON.parse(myJSONtext, reviver);  var myObject = JSON.parse(myJSONtext, re

14、viver);一個(gè)替換函數(shù)(reviver function)做為可選參數(shù)被最終結(jié)果的每一級的鍵(key)與值(value)調(diào)用。 每個(gè)值都將被替換函數(shù)的值代替。這可以用來將一般的類改變成偽類的實(shí)例,或者將日期字符串轉(zhuǎn)變?yōu)槿掌趯ο蟆?Javascript代碼 1. myData = JSON.parse(text, function (key, value)   2.     var type;  3.    

15、60;if (value && typeof value = 'object')   4.         type = value.type;  5.         if (typeof type = 'string'

16、 && typeof windowtype = 'function')   6.             return new (windowtype)(value);  7.           8.   

17、    9.     return value;  10. );  myData = JSON.parse(text, function (key, value) var type; if (value && typeof value = 'object') type = value.type; if (typeof type = 'string' && typeof windowtype = '

18、;function') return new (windowtype)(value); return value;);JSON stringifier進(jìn)行反向操作,可以把JavaScript數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為JSON文本。JSON不支持循環(huán)數(shù)據(jù)結(jié)構(gòu),因此應(yīng)小心不要為JSON stringifier提供循環(huán)結(jié)構(gòu)。 Javascript代碼 1. var myJSONText = JSON.stringify(myObject, replacer);  var myJSONText = JSON.stringify(myObject,

19、 replacer);如果stringify函數(shù)發(fā)現(xiàn)一個(gè)帶有toJSON方法的對象,它將執(zhí)行此方法,并且返回產(chǎn)生的值。這樣一個(gè)對象就可以決定自己的JSON表現(xiàn)。 stringifier方法可以攜帶一個(gè)可選的字符串?dāng)?shù)組。這些字符串被用于選擇包括在JSON文本中的屬性。 stringifier方法可以攜帶一個(gè)可選的替代(replacer)函數(shù)。它將在結(jié)構(gòu)中每個(gè)值的toJSON方法(如果有的話)后面執(zhí)行。它將每個(gè)鍵與值做為參數(shù)傳遞,當(dāng)然對象要包含這個(gè)鍵。值將被stringified返回。 如果沒有提供數(shù)組或替代函數(shù),一個(gè)用于忽略被集成的屬性的可選替代函數(shù)將被提供。如果想要所有被繼承的屬性,可以提供一

20、個(gè)簡單的替換函數(shù): Javascript代碼 1. var myJSONText = JSON.stringify(myObject, function (key, value)   2.     return value;  3. );  var myJSONText = JSON.stringify(myObject, function (key, value) return value;);值在JSON中不代表

21、任何內(nèi)容,函數(shù)與未定義(undefined)被排除在外。 不能確定的數(shù)量將被替換為null。為了替代其它的值,可以像下面一樣使用替換(replacer)函數(shù) Javascript代碼 1. function replacer(key, value)   2.     if (typeof value = 'number' && !isFinite(value)   3.  &

22、#160;      return String(value);  4.       5.     return value;  6.   function replacer(key, value) if (typeof value = 'number' && !isFinite(value) return String(va

23、lue); return value;開放源代碼的JSON解析器與JSON stringifier可以使用。通過minified可以小于2.5K。 下面是對json對象的增刪查改操作: /聲明json對象 Javascript代碼 1. var jsonObj2=persons:name:"jordan",sex:"m",age:"40", name:"bryant",sex:"m",age:"28", name:"McGrady&qu

24、ot;,sex:"m",age:"27"    var jsonObj2=persons:name:"jordan",sex:"m",age:"40", name:"bryant",sex:"m",age:"28", name:"McGrady",sex:"m",age:"27" ; Javascript代碼 1. var pe

25、rsons=jsonObj2.persons;   2. var str=""   3. var person=name:"yaoMing",sex:"m",age:"26"   4. /以下為json對象的操作,去掉注釋可以查看操作結(jié)果   5. /jsonObj2.persons.push(person);/數(shù)組最后加一條記錄   6. /js

26、onObj2.persons.pop();/刪除最后一項(xiàng)   7. /jsonObj2.persons.shift();/刪除第一項(xiàng)   8. jsonObj2.persons.unshift(person);/數(shù)組最前面加一條記錄 只要適合Javascript的方法都是可以用在JSON對象的數(shù)組中的!所以還有另外的方法splice( )進(jìn)行crud操作! /刪除   9. /jsonObj2.persons.splice(0,2);/開始位置,刪除個(gè)數(shù)  

27、; 10. /替換不刪除   11. var self=name:"tom",sex:"m",age:"24"   12. var brother=name:"Mike",sex:"m",age:"29"   13. jsonObj2.persons.splice(1,0,self,brother,self);/開始位置,刪除個(gè)數(shù),插入對象 

28、60; 14. /替換并刪除   15. /jsonObj2.persons.splice(0,1,self,brother);/開始位置,刪除個(gè)數(shù),插入對象   16.   17. for(var i=0;i<persons.length;i+) var cur_person=personsi; str+=cur_+"'sex is "+cur_person.sex+" 

29、;and age is "+cur_person.age+"<br><br>"    18. document.writeln(str);   19. /轉(zhuǎn)換為json文本   20. var myjsonobj =  JSON.stringify(jsonObj2);   21. document.writeln(myjsonobj);   22. </script>   var persons=jsonObj2.persons; var str=&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論