一、参考资料:
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/