




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JavaScript Object Notation (JSON) JavaScript功能核心子集关键字: json JavaScript Object Notation ,以下简称JSON。 JSON提供了一种简约的机制来创建数字和对象图。这样做可以降低复杂性,一般傻瓜会这样做: 先申明一个对象数组,之后往数组里写值。如: 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班"这样数组里嵌对象,对象里嵌数组的方法很不美观,也不可读。使用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容器的做法,以“键:值”定义数组classes。当然,JSON还可以定义更加复杂的对象,可以说JSON就是天生为了构件这样复杂对象数组的。 有的时候还可以创建这样复杂的: 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;,;引用对象是属性、值对的集合。 一个对象的开始于“”,结束于“”。每一个属性名和值间用“:”提示,属性间用“,”分隔。 数组是有顺序的值的集合。一个数组开始于"",结束于"",值之间用","分隔。值可以是引号里的字符串、数字、true、false、null,也 可以是对象或数组。这些结构都能嵌套。 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.*" ;上面的示例,创建了一个包括单独成员”bindings”的对象,此成员包括一个含有三个对象(”ircEvent”, “method”, 与 “regex”)的数组 成员可以通过.或者下标操作符检索。 Javascript代码 1
11、. myJSONObject.bindings0.method / "newURI" myJSONObject.bindings0.method / "newURI"为了将JSON文本转换为对象,可以使用eval()函数。eval()函数调用JavaScript编辑器。由于JSON是JavaScript的子集,因此编译器将正确的解析文本并产生对象结构。文本必须括在括号中避免产生JavaScript的语法歧义。 Javascript代码 1. var myObject&
12、#160;= eval('(' + myJSONtext + ')'); var myObject = eval('(' + myJSONtext + ')');eval函数非常快速。它可以编译执行任何JavaScript程序,因此产生了安全性问题。当使用可信任与完善的源代码时才可以使用eval函 数。这样可以更安全的使用JSON解析器。使用XMLHttpRequest的web应用,页面之间的通讯只允许同源,因此是可以信任的。但这却不是完善 的。如果服务器没有
13、严谨的JSON编码,或者没有严格的输入验证,那么可能传送包括危险脚本的无效JSON文本。eval函数将执行恶意的脚本。 使用JSON解析器可以防止此类事件。JSON解析器只能辨识JSON文本,拒绝所有脚本。提供了本地JSON支持的浏览器的JSON解析器将远快于eval函数。预计未来的ECMAScript标准将支持本地JSON。 Javascript代码 1. var myObject = JSON.parse(myJSONtext, reviver); var myObject = JSON.parse(myJSONtext, re
14、viver);一个替换函数(reviver function)做为可选参数被最终结果的每一级的键(key)与值(value)调用。 每个值都将被替换函数的值代替。这可以用来将一般的类改变成伪类的实例,或者将日期字符串转变为日期对象。 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进行反向操作,可以把JavaScript数据结构转换为JSON文本。JSON不支持循环数据结构,因此应小心不要为JSON stringifier提供循环结构。 Javascript代码 1. var myJSONText = JSON.stringify(myObject, replacer); var myJSONText = JSON.stringify(myObject,
19、 replacer);如果stringify函数发现一个带有toJSON方法的对象,它将执行此方法,并且返回产生的值。这样一个对象就可以决定自己的JSON表现。 stringifier方法可以携带一个可选的字符串数组。这些字符串被用于选择包括在JSON文本中的属性。 stringifier方法可以携带一个可选的替代(replacer)函数。它将在结构中每个值的toJSON方法(如果有的话)后面执行。它将每个键与值做为参数传递,当然对象要包含这个键。值将被stringified返回。 如果没有提供数组或替代函数,一个用于忽略被集成的属性的可选替代函数将被提供。如果想要所有被继承的属性,可以提供一
20、个简单的替换函数: 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、任何内容,函数与未定义(undefined)被排除在外。 不能确定的数量将被替换为null。为了替代其它的值,可以像下面一样使用替换(replacer)函数 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对象的操作,去掉注释可以查看操作结果 5. /jsonObj2.persons.push(person);/数组最后加一条记录 6. /js
26、onObj2.persons.pop();/删除最后一项 7. /jsonObj2.persons.shift();/删除第一项 8. jsonObj2.persons.unshift(person);/数组最前面加一条记录 只要适合Javascript的方法都是可以用在JSON对象的数组中的!所以还有另外的方法splice( )进行crud操作! /删除 9. /jsonObj2.persons.splice(0,2);/开始位置,删除个数
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);/开始位置,删除个数,插入对象
28、60; 14. /替换并删除 15. /jsonObj2.persons.splice(0,1,self,brother);/开始位置,删除个数,插入对象 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. /转换为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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乡村旅游与乡村旅游产业链整合:2025年文旅融合研究报告
- 国际教育技术比较不同国家的策略与成果
- 人机协作在教育资源配置中的价值探讨
- 教育领域的跨界合作与创新探索
- 游戏化培训在企业管理中的价值
- 教育科技的发展对商业生态的影响
- 痔的套扎诊断及治疗深入研究培训
- 督脉与腧穴修正版教材课程
- 疾控中心健康教育工作交流
- 第三章学前儿童的营养需要
- 【真题】江苏省苏州市2025年中考物理试卷(含答案解析)
- 卡口及道路交通智能监控系统方案设计
- 呼吸机相关性肺炎的预防和护理
- 肺结核鉴别诊断
- 门诊口腔院感基础知识培训
- 论咏叹调《妈妈不在》的形象刻画与唱段处理
- 2025年邮政社招笔试考试历年真题及答案
- 2025年河南省中考数学试卷及答案
- 仓库技能考试试题及答案
- 子宫平滑肌瘤护理
- 营造林工程监理规范(试行)
评论
0/150
提交评论