JSON是一种正在网络上慢慢兴起的数据交换格式。就象AJAX并不是什么新技术一样,JSON也没有提供什么新格式,它基于ECMAScript标准中对ObjectLiteral的定义
(ECMA-262, 11.1.5),早就被javascript支持。
格式定义非常简单,就是通过一组键值对来定义一个对象。在javascript中,你可以直接将这种格式的数据赋值给一个变量,然后通过键名取值。相对于使用xml来作为
数据交换格式,如果要在javascript里使用,首先需要创建一个DOMParser,然后通过DOM接口访问节点对象,非常繁琐,更不用说不同浏览器的实现中DOMParser的
实现和DOM接口都有诸多不同。为什么大量的AJAX应用中宁可直接返回一个HTML片断而不是直接把 XML交给javascript处理,一个主要原因就是处理XML的过程比较复
杂。JSON最重要的贡献就是简化了解析数据的过程。
JSON建构于两种结构:
1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希
表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
在JavaScript中使用JSON
JSON是JavaScript对象描述符号(object literal notation)的一个子集。正因为JSON是JavaScript的子集,所以在JavaScript中我们可以很容易的使用它。
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"
我们可以使用eval()函数的eval()方法调用JavaScript的编译器把JSON文本转变成对象。因为JSON是JavaScript的一个确切的子集,编译器可以正确地解析JSON文本,
然后生成一个对象结构。
var myObject = eval('(' + myJSONtext + ')');
eval函数的执行效率很高。然而,它能够编译、执行任何的JS程序,所以这样会有安全问题。在来源可信的时候才需要使用eval,这通常是服务器提供基础页面和JSON
数据的web应用程序中的情形。而很多情况中,来源是不可信的。特别是永远都不要信任客户端。
如果关心安全的话,那最好是使用JSON解析器了(js脚本中有解析功能的函数)。JSON解析器只认可JSON文本,因此它比较安全:
var myObject = myJSONtext.parseJSON();
而JSON的字符串转换器(stringifier)则作相反的工作,它将JavaScript数据结构转换为JSON文本。JSON是不支持循环数据结构的,所以注意不能把循环的结构交给字
符串转换器。
var myJSONText = myObject.toJSONString();
这里是JSON官方网站提供的一个开源的JSON解析器和字符串转换器:json.js
JSON/XML
最新推荐文章于 2024-07-30 00:45:00 发布