Ajax中数据传递的另外一种模式:JSON

       Ajax是“异步javascript和XML”的缩写已经众所周知,然而虽然XML是看上去的重要组成部分,它却不是必须的。一位资深的软件工程师Douglas Crock ford 开发了一个内建于 javascript 的数据格式,称为javascript 对象表示(JSON,javascript Object Notation),意思是直接使用Ajax对象来传递信息,能够读做“Jason”。
1. 什么是 JSON
      JSON概念很简单,JSON 是一种轻量级的数据格式,他基于 javascript 语法的子集,即数组和对象表示。因为使用的是 javascript 语法,所以JSON 定义能够包含在javascript 文件中,对其的访问无需经过基于 XML 的语言来额外解析。不过在使用 JSON 以前,很重要的一点是理解 javascript 中数组及对象字面量的特殊语法。
1.1 数组字面量
         数组字面量,是用一对方括号括起一组用逗号隔开的 javascript 值,例如:
        var aNames=["hello", 12, true , null];
1.2 对象字面量
        对象字面量,是经过两个花括号来定义的。在花括号内能够放置任意数量的“名称-值”对,定义格 式字符串值”。除了最后一行外,每一个“名称-值”对后必须有一个逗号(这与Perl 中的联合数组的定义有些相似)。例如:
        var oCar = {
               "color": "red",       
              "doors" : 4,
               "paidFor" : true
        };
1.3 混合字面量
      咱们能够混用对象和数组字面量,来建立一个对象数组,或一个包含数组的对象。例如:
{comments:[
{
id:1,
author:"someone1",
url:"http://someone1.x2design.net ",
content:"hello"
},
{
id:2,
author:"someone2",
url:"http://someone2.x2design.net ",
content:"hello"
},
{
id:3,
author:"someone3",
url:"http://someone3.x2design.net ",
content:"hello"
}
]};
1.4 JSON 语法
      在Ajax应用中,就是服务器直接生成javascript语句,客户端获取后直接用eval方法来得到这个对象,这样就能够省去解析XML的性能损失。同时,在javascript 通讯中使用JSON做为数据格式的好处很明星,能够当即得到数据的值,所以能够更快的访问其中包含的数据。
      var oCarInfo = eval("(" + sJSON + ")");
请记住:在javascript中花括号也是一个语句。要让解析器知道这个花括号表示的是一个对象而非一个语句的惟一方法是可否找到封装它的圆括号(它是用来讲明代码是一个表达式而非一个语句)。
1.5 JSON 编码和解码
       做为 JSON 资源的一部分,Corockford 开发了一个可以实现 JSON 和Javascript 对象直接解码和编码的工具。这个工具的源程序能够在 [url]www.crockford.com/JSON/json.js[/url] 中下载。
       在上面提出用到eval() 存在些固有的不足:它是用来对传入的任何 Javascript 代码求值的,而不只仅针对JSON。所以,当涉及企业级 web 应用程序开发时,它存在很大的安全隐患。为了解决这个问题,可使用只用来将 JSON 代码转换为 Javascript 的解析器 JSON.parse() 方法来实现。例如:
       var oObject = JSON.parse (sJSON);
       同时,它也提供了一种将 Javascript 对象转换为 JSON 字符串(数据传输时使用的)的工具(在Javascript 中没有内建这种功能支持)。你要作的只是将对象传入到 JSON.Stringify() 方法。请看下面的例子:
       var oCar = new Object();
       oCar.doors = 4;
        oCar.color = "blue";
       oCar.year = 1995;
       oCar.drivers = new Array("Penny", "Dan" , "Kris");
       document.write(JSON.stringify(oCar));
这段代码将输出以下所示的JSON 字符串:
{"doors" : 4, "color" : "blue", "year" :1995, "drivers" : ["Penny", "Dan" , "Kris"]}
2. JSON 与 XML
       正如上面所说,JSON 与 XML 相比的一大优势就是它更加简单。
请看 XML 数据表示实例:
使用XML表示:
<comments>
<comment>
<id>1</id>
<author>someone1</author>
<url>[url]http://someone1.x2design.net</url>[/url]
<content>hello</content>
</comment>
<comment>
<id>2</id>
<author>someone2</author>
<url>[url]http://someone2.x2design.net</url>[/url]
<content>someone1</content>
</comment>
<comment>
<id>3</id>
<author>someone3</author>
<url>[url]http://someone3.x2design.net</url>[/url]
<content>hello</content>
</comment>
</comments>

使用JSON表示:
{comments:[
{
id:1,
author:"someone1",
url:"http://someone1.x2design.net ",
content:"hello"
},
{
id:2,
author:"someone2",
url:"http://someone2.x2design.net ",
content:"hello"
},
{
id:3,
author:"someone3",
url:"http://someone3.x2design.net ",
content:"hello"
}
]};

       很容易发现,许多冗余的信息不见了。因为不须要有与开始标签(opening tag)匹配的结束标签(closing tag),所以传送相同的信息所需的字节数大大下降了。创始人 Corockford 将其称之为“XML 的减肥方案”)。
        JSON 格式的数据与 XML 相比,缺点是对于外行人可读性更差。固然,有一种观点是,数据交换格式不是用肉眼观察的。若是是经过工具对来回传送的数据进行建立和解析,那么的确没有理由要求数据必须令人们易于阅读。问题的实质在于:存在可用的 JSON 工具。
3. 服务器端 JSON 工具
java :java JSON 工具,由Douglas Crock ford 开发,可在 [url]www.crockford.com/JSON/java/[/url]
           中下载,它能够在 JSP 中使用。
4. JSON 优点与缺点
       JSON不只减小了解析XML解析带来的性能问题和兼容性问题,并且对于javascript来讲很是容易使用,能够方便的经过遍历数组以及访问对象属性来获取数据,其可读性也不错,基本具有告终构化数据的性质。不得不说是一个很好的办法,并且事实上google maps就没有采用XML传递数据,而是采用了JSON方案。
       JSON 另一个优点是跨域可行性,例如你在 [url]www.xxx.com[/url] 的网页里使用是彻底可行的,这就意味着你能够跨域传递信息。而使用XMLHttpRequest却获取不了跨域的信息,这是javascript内部的安全性质所限制的。
       JSON看上去很美,是否是就能彻底取代XML呢?事实并不是如此,而缘由就在于XML的优点:通用性。要使服务器端产生语法合格的javascript代码并非很容易作到的,这主要发生在比较庞大的系统,服务器端和客户端有不一样的开发人员。它们必须协商对象的格式,这很容易形成错误。
       不管如何,JSON是一个诱人的技术,准备作一个大量的试用。但愿届时能够获取大的性能提升。
参考文献:
1. Ajax 高级程序设计[M] 图灵程序设计丛书(Ajax 系列)人民邮电出版社
相关文章
相关标签/搜索