一、參考資料:
url-1:http://baike.baidu.com/view/136475.htm
url-2:http://www.cnblogs.com/beijia/archive/2011/10/05/json2.html
url-3:http://wenku.baidu.com/view/202947649b6648d7c1c746fc.html
二、參考百度百科中對json的解釋:
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。json簡單說就是javascript中的對象和數組,所以這兩種結構就是對象和數組2種結構,通過這兩種結構可以表示各種復雜的結構
JSON建構有兩種結構:
1. 對象:對象在js中表示為“{}”擴起來的內容,數據結構為 {key:value,key:value,...}的鍵值對的結構,在面向對象的語言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,取值方法為 對象.key 獲取屬性值,這個屬性值的類型可以是 數字、字符串、數組、對象幾種。
2. 數組:數組在js中是中括號“[]”擴起來的內容,數據結構為 ["java","javascript","vb",...],取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是 數字、字符串、數組、對象幾種。
經過對象、數組2種結構就可以組合成復雜的數據結構了。
3. eg:
{ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
]}
------------------------------------------------
博主經營一家發飾淘寶店,都是純手工制作哦,開業沖鑽,只為信譽!需要的親們可以光顧一下!謝謝大家的支持!
店名:
小魚尼莫手工飾品店
經營:
發飾、頭花、發夾、耳環等(手工制作)
網店:
http://shop117066935.taobao.com/
---------------------------------------------------------------------
繼續正題...
三、json2.js的使用
下載地址:http://ishare.iask.sina.com.cn/download/explain.php?fileid=9897216
引入方式:在頁面中引用該腳本<script type="text/javascript" src="js/json2.js"></script>
四、json2學習
先列出兩個demo代碼,再進行分析
- demo_A
<!DOCTYPE html> <html> <head> <script src="js/json2.js" type="text/javascript"></script> </head> <body> <script> var normalstring='[{persons:[{name:"jordan",sex:"m",age:"40"}, {name:"bryant",sex:"m",age:"28"}, {name:"McGrady",sex:"m",age:"27"} ]}]'; var jsontext='[{"persons":[{"name":"jordan","sex":"m","age":"40"}, {"name":"bryant","sex":"m","age":"28"}, {"name":"McGrady","sex":"m","age":"27"} ]}]'; var myJSONObject = {"bindings": [ {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}, {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"}, {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"} ] }; //調用eval函數轉換為json對象 /*將普通字符串轉化為json對象*/ var myE = eval(normalstring); //將json對象轉換為字符串 var text = JSON.stringify(myE); //JSON解析 /*將json格式文本解析為json對象*/ var myData = JSON.parse(jsontext); //對比聲明的文本與轉換后的json文本區別: document.writeln('聲明的普通格式文本normalstring = <br>'+normalstring+'<br><br>聲明的json格式文本jsontext = <br>'+jsontext+'<br><br>轉換后的json文本(先eval轉json對象,再JSON.stringify轉字符串):<br>'+text+'<br>'); </script> </body> </html>
運行結果:
聲明的普通格式文本normalstring =
[{persons:[{name:"jordan",sex:"m",age:"40"}, {name:"bryant",sex:"m",age:"28"}, {name:"McGrady",sex:"m",age:"27"} ]}]
聲明的json格式文本jsontext =
[{"persons":[{"name":"jordan","sex":"m","age":"40"}, {"name":"bryant","sex":"m","age":"28"}, {"name":"McGrady","sex":"m","age":"27"} ]}]
轉換后的json文本(先eval轉json對象,再JSON.stringify轉字符串):
[{"persons":[{"name":"jordan","sex":"m","age":"40"},{"name":"bryant","sex":"m","age":"28"},{"name":"McGrady","sex":"m","age":"27"}]}]
分析:
1.代碼中直接聲明json數據結構var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
};
創建了一個對象,它只包含一個成員“bindings”,“bindings”是一個包含了3個對象的數組,而這每個對象都有"ircEvent"、"method"和"regex"3個成員,這些成員可以用“.”或subscript 操作得到。
如:myJSONObject.bindings[0].method // 獲取"newURI"
myJSONObject.bindings[1].deleteURI // 獲取"newURI"
2.對比聲明字符串normalstring和json格式文本jsontext(從代碼結果中查看區別)
3.使用eval()函數調用JavaScript的編譯器把JSON文本轉變成對象。因為JSON是JavaScript的一個確切的子集,編譯器可以正確地解析JSON文本,然后生成一個對象結構。因而eval函數將一般字符串轉換為json對象:var myE = eval(normalstring);
4.使用JSON.stringify(),將json對象轉換為字符串:var text = JSON.stringify(myE);
5.轉換后的json文本和聲明的json格式文本內容是相同的。
另外:當安全比較重要的時候使用JSON解析就好一些。JSON解析只會識別JSON文本並且它更安全,下面調用json的parse函數對文本數據轉換生成json數據結構:
var myData = JSON.parse(jsontext);
- Demo_B
<!DOCTYPE html> <html> <head> <script src="js/json2.js" type="text/javascript"></script> </head> <body> <script> //聲明json對象 var jsonObj2={persons:[ {name:"jordan",sex:"m",age:"40"}, {name:"bryant",sex:"m",age:"28"}, {name:"McGrady",sex:"m",age:"27"} ]}; var persons=jsonObj2.persons; var str=""; var person={name:"yaoMing",sex:"m",age:"26"}; //以下為json對象的操作,去掉注釋可以查看操作結果 jsonObj2.persons.push(person); //數組最后加一條記錄 jsonObj2.persons.pop(); //刪除最后一項 jsonObj2.persons.shift(); //刪除第一項 jsonObj2.persons.unshift(person);//數組最前面加一條記錄 jsonObj2.persons.splice(0,2); //開始位置,刪除個數 ,eg:含有1234,則刪除1、2 //替換不刪除 var self={name:"tom",sex:"m",age:"24"}; var brother={name:"Mike",sex:"m",age:"29"}; jsonObj2.persons.splice(1,0,self,brother,self);//開始位置,刪除個數為0,插入對象 //替換並刪除 jsonObj2.persons.splice(0,1,self,brother);//開始位置,刪除個數為1,插入對象 //json對象的遍歷顯示 for(var i=0;i<persons.length;i++){ var cur_person=persons[i]; str+=cur_person.name+"'sex is "+cur_person.sex+" and age is "+cur_person.age+"<br><br>"; } document.writeln(str); //轉換為json格式文本 var myjsonobj = JSON.stringify(jsonObj2); document.writeln(myjsonobj); //json長度 document.writeln("<br/>length= " + persons.length); </script> </body> </html>
運行結果:
tom'sex is m and age is 24
Mike'sex is m and age is 29
tom'sex is m and age is 24
Mike'sex is m and age is 29
tom'sex is m and age is 24
{"persons":[{"name":"tom","sex":"m","age":"24"},{"name":"Mike","sex":"m","age":"29"},{"name":"tom","sex":"m","age":"24"},{"name":"Mike","sex":"m","age":"29"},{"name":"tom","sex":"m","age":"24"}]}
length= 5
分析:
1.實例B中使用了A中JSON.stringify()方法,將json對象轉換為json格式文本: var myjsonobj = JSON.stringify(jsonObj2);
2.演示了對json對象操作的幾種方法:
.push(); //數組最后加一條記錄 .pop(); //刪除最后一項 .shift(); //刪除第一項 .unshift(person); //數組最前面加一條記錄 只要適合Javascript的方法都是可以用在JSON對象的數組中的! .splice(1,0,self,brother,self); //替換不刪除:開始位置,刪除個數為0,插入對象 .splice(0,1,self,brother); //替換並刪除:開始位置,刪除個數為1,插入對象
五、總結
綜上,引入json2,可以看做為實現普通文本字符串normalstring、json對象jsonObj、json格式字符串之間的轉換,其中常用方法有:
eval(normalstring);
JSON.stringify(jsonObj);
JSON.parse(jsontext);
店名:
小魚尼莫手工飾品店
經營:
發飾、頭花、發夾、耳環等(手工制作)
網店:
http://shop117066935.taobao.com/
