Ajax中数据传递的另一种模式 javascript Object Notation思想(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];

[html]

1.2 对象字面量

对象字面量,是通过两个花括号来定义的。在花括号内可以放置任意数量的“名称-值”对,定义格 式字符串值”。除了最后一行外,每个“名称-值”对后必须有一个逗号(这与Perl 中的联合数组的定义有些类似)。例如:

[code]

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 对象直接解码和编码的工具。这个工具的源程序可以在 www.crockford.com/JSON/json.js 中下载。

在上面提出用到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>http://someone1.x2design.net</url>

<content>hello</content>

</comment>

<comment>

<id>2</id>

<author>someone2</author>

<url>http://someone2.x2design.net</url>

<content>someone1</content>

</comment>

<comment>

<id>3</id>

<author>someone3</author>

<url>http://someone3.x2design.net</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 开发,可在 www.crockford.com/JSON/java/

中下载,它可以在 JSP 中使用。

4. JSON 优势与缺点

JSON不仅减少了解析XML解析带来的性能问题和兼容性问题,而且对于javascript来说非常容易使用,可以方便的通过遍历数组以及访问对象属性来获取数据,其可读性也不错,基本具备了结构化数据的性质。不得不说是一个很好的办法,而且事实上google maps就没有采用XML传递数据,而是采用了JSON方案。

JSON 另外一个优势是跨域可行性,例如你在www.xxx.com的网页里使用是完全可行的,这就意味着你可以跨域传递信息。而使用XMLHttpRequest却获取不了跨域的信息,这是javascript内部的安全性质所限制的。

JSON看上去很美,是不是就能完全取代XML呢?事实并非如此,而原因就在于XML的优势:通用性。要使服务器端产生语法合格的javascript代码并不是很容易做到的,这主要发生在比较庞大的系统,服务器端和客户端有不同的开发人员。它们必须协商对象的格式,这很容易造成错误。

无论如何,JSON是一个诱人的技术,准备做一个大量的试用。希望届时可以获取大的性能提高。

时间: 2024-09-16 20:38:21

Ajax中数据传递的另一种模式 javascript Object Notation思想(JSON)的相关文章

Ajax中数据传递的另一种模式 javascript Object Notation思想(JSON)_AJAX相关

Ajax是"异步javascript和XML"的缩写已经众所周知,然而虽然XML是看上去的重要组成部分,它却不是必须的.一位资深的软件工程师Douglas Crock ford 开发了一个内建于 javascript 的数据格式,称为javascript 对象表示(JSON,javascript Object Notation),意思是直接使用Ajax对象来传递信息,可以读作"Jason". 1. 什么是 JSON JSON概念很简单,JSON 是一种轻量级的数据格

ajax中data传参的两种方式分析

本文实例讲述了ajax中data传参的两种方式.分享给大家供大家参考,具体如下: 1. POST方式: /** * 订单取消 * @return {Boolean} 处理是否成功 */ function orderCancel(orderId, commant){ var flag = false; $.ajax({ type: "POST", url: "../order/orderCancel.action", //orderModifyStatus data:

ajax中data传参的两种方式分析_AJAX相关

本文实例讲述了ajax中data传参的两种方式.分享给大家供大家参考,具体如下: 1. POST方式: /** * 订单取消 * @return {Boolean} 处理是否成功 */ function orderCancel(orderId, commant){ var flag = false; $.ajax({ type: "POST", url: "../order/orderCancel.action", //orderModifyStatus data:

数据集成通过JDBC将数据导入MySQL的几种模式

目前MySQL JDBC提供了多种将数据写入MySQL的方式,本文将介绍数据集成(DataX.同步中心.原CDP)支持的几种模式: insert into xxx values (..), (..), (..) replace into xxx values (..), (..), (..) insert into xxx values (..), (..), (..), - on duplicate key update - 1.功能区别 1.1 insert into 方式 常规的SQL插入

分析在Worklight中开发本地功能的三种模式

文章将分析在 Worklight 中开发本地功能的三种模式:调用 Cordova 支持的本地功能:通过 Worklight common API 调用开发的本地功能:编写 Cordova 的插件,调用本地功能.然后通过相应的实例展现不同方法的使用模式,向读者展现 Worklight 在和本地功能结合上的能力.最后分析各自的优缺点和使用的环境. 纯 web 模式的局限性 在 Worklight 架构下,纯 web 模式虽然可以像本地应用一样被安装在手机上,但是所提供的服务和传统的网页相比,几乎没有

Android中Intent传递对象的两种方法(Serializable,Parcelable)

Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧! 第一步:新建一个Android工程命名为ObjectTranDemo(类比较

Android中Intent传递对象的两种方法Serializable,Parcelable

Android中的传递有两个方法,一个是Serializable,另一个是Parcelable. Serializable是J2SE本身就支持的.而Parcelable是Android所特有的. 二者的使用场景和区别: 1)在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable. 2)Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC. 3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelab

ASP.NET中促进代码重用的2种模式

开发复杂的动态ASP.NET应用程序时,必须尽量减少重复代码,提高应用程序的重用性和灵活性.在某些应用程序中,用户采取的不同操作可能具有不同的控制器逻辑,但结果都是相同的视图(例如显示一个产品列表时,可能允许用户增添或删除一件产品.但在控制器引导用户完成了添加或删除过程后,最终显示的都是同样的产品视图,其中含有修改过的数据).  开发可重用的程序逻辑时,第一步就是尽量减少服务器脚本页中的代码数量.脚本页中的逻辑很难(有时甚至不可能)重用,造成视图和控制器分离得不够好.另外,它的测试和调试也显得异

Android中Intent传递对象的3种方式详解_Android

前言 相信Intent的用法大家已经比较熟悉了,Intent可以用来启动Activity,Service等等,同时我们也可以通过Intent来进行传递数据,当我们使用Intent在Activity 间传递信息时发现putExtra() 方法并不支持自定义对象的传输,下面就来介绍三种解决方式. 一.Serializable 方式 这是最简单的一种方法,因为我们要做的就是让我们自定义的对象实现 Serializable 这个空接口. public class Person implements Se