XML——这种用于表示客户端与服务器间数据交换有效负载的格式,几乎已经成了Web services的同义词。然而,由于Ajax和REST技术的出现影响了应用程序架构,这迫使人们开始寻求`XML的替代品,如:JavaScript Object Notation(JSON)。
JSON 作为一种更轻、更友好的 Web services客户端的格式(多采用浏览器的形式或访问 REST风格 Web服务的Ajax应用程序的形式)引起了 Web 服务供应商的注意。
XML的十字路口: 浏览器和 Ajax
XML设计原理已经发布了将近十年。时至今日,这种标记语言已经在广阔的软件应用领域中占据了主导地位。从Java、.NET等主流平台中的配置和部署描述符到应用集成场景中更复杂的应用,XML与生俱来的语言无关性使之在软件架构师心目中占据着独特的地位。但即便最著名的XML权威也不得不承认:在某些环境中,XML的使用已经超出了它自身能力的极限。
围绕Ajax原理构建的那些Web应用程序最能说明XML的生存能力,从这一点来看,一种新的有效负载格式的发展壮大也得益于XML。这种新的有效负载格式就是JavaScript Object Notation (JSON)。在探索这种新的标记语言的复杂性之前,首先来分析一下在这种独特的设计形式中,XML具有哪些局限性。
Ajax建立了一个用于从远程Web services发送和接收数据的独立信道,从而允许Web程序执行信道外(out-of-band)客户端/服务器调用。通俗地说,Ajax程序中的更新和导航序列在典型的客户端/服务器环境之外完成,在后台(即信道外)接受到信息后,必须进行一次完整的屏幕刷新。更多背景信息,请参阅David Teare的 Ajax简介(Dev2Dev)。
这些应用程序更新通常是通过REST风格(RESTful)Web services获得的,一旦被用户的浏览器接收到,就需要整合到HTML页面的总体布局之中,这正是XML发挥强大力量的场合。尽管近年来,脚本语言支持和插件支持已使大多数主流浏览器的功能得到了强化,但许多编程任务依然难于开展,其中之一就是操纵或处理文本,这通常是使用DOM实现的。
采用DOM的复杂性源于其基于函数的根,这使得对数据树的简单修改或访问都需要进行无数次方法调用。此外,众所周知,DOM在各种浏览器中的实现细节不尽相同,这一过程将带来极为复杂的编程模式,其跨浏览器兼容性出现问题的可能性极大。接下来的问题显而易见,那就是:如何使一种标记语言轻松集成到HTML页面中以满足Ajax的要求?
问题的答案就是:利用所有主流浏览器中的一种通用组件——JavaScript引擎。XML需要使用DOM之类的机制来访问数据并将数据整合到布局之中,采用这种方法,我们不再使用像XML这样的格式来交付Ajax更新,而是采用一种更为简单直观的方式,采用JavaScript引擎自然匹配的格式——也就是JSON。
既然已经明确了JSON与XML和Ajax之间的关系,下面将进一步探讨JSON背后的技术细节。
JSON剖析:优点和不足
对于JSON,首先要明白JSON和XML一样也是一种简单文本格式。相对于XML,它更加易读、更便于肉眼检查。在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。下图是一个JSON有效负载:
{"addressbook": {"name": "Mary Lebow",
"address": {
"street": "5 Main Street"
"city": "San Diego, CA",
"zip": 91912,
},
"phoneNumbers": [
"619 332-3452",
"664 223-4667"
]
}
}
将上面的JSON有效负载用XML改写,如下:
<addressbook>
<name>Mary Lebow</name>
<address>
<street>5 Main Street</street>
<city zip="91912"> San Diego, CA </city>
<phoneNumbers>
<phone>619 332-3452</phone>
<phone>664 223-4667</phone>
</phoneNumbers>
</address>
</addressbook>
是不是很相似?但它们并不相同。下面将详细阐述采用JSON句法的优点和不足。
优点
乍看上去,使用JSON的数据分隔符的优点可能并不那么明显,但存在一个根本性的缘由:它们简化了数据访问。使用这些数据分隔符时, JavaScript引擎对数据结构(如字符串、数组、对象)的内部表示恰好与这些符号相同。
这将开创一条比DOM技术更为便捷的数据访问途径。下面列举几个JavaScript代码片段来说明这一过程,这些代码片段会访问先前的JSON代码片段中的信息:
访问JSON中的名称: addressbook.name
访问JSON中的地址: addressbook.address.street
访问JSON中的电话号码第一位:addressbook.address.phoneNumbers[0]
如果您具备DOM编程经验,就能很快地看出区别;新手可以参看 Document Object Model 的这一外部资源,这里提供了关于数据导航的实例。
JSON的另一个优点是它的非冗长性。在XML中,打开和关闭标记是必需的,这样才能满足标记的依从性;而在JSON中,所有这些要求只需通过一个简单的括号即可满足。在包含有数以百计字段的数据交换中,传统的XML标记将会延长数据交换时间。目前还没有正式的研究表明JSON比XML有更高的线上传输效率;人们只是通过简单的字节数比较发现,对于等效的JSON和XML有效负载,前者总是小于后者。至于它们之间的差距有多大,特别是在新的XML压缩格式下它们的差距有多大,有待进一步的研究。
此外,JSON受到了擅长不同编程语言的开发人员的青睐。这是因为无论在Haskell中或 Lisp中,还是在更为主流的C#和PHP中,开发都可以方便地生成JSON(详见 参考资料)。
不足
和许多好东西都具有两面性一样,JSON的非冗长性也不例外,为此JSON丢失了XML具有的一些特性。命名空间允许不同上下文中的相同的信息段彼此混合,然而,显然在JSON中已经找不到了命名空间。JSON与XML的另一个差别是属性的差异,由于JSON采用冒号赋值,这将导致当XML转化为JSON时,在标识符(XML CDATA)与实际属性值之间很难区分谁应该被当作文本考虑。
另外,JSON片段的创建和验证过程比一般的XML稍显复杂。从这一点来看,XML在开发工具方面领先于JSON。尽管如此,为了消除您对这一领域可能存在的困惑,下节将介绍一些最为成熟的JSON开发。
http://www.json.org/json-zh.html
在java中的应用:
JSON-lib is a java library for transforming beans, maps, collections, java arrays and XML to JSON and back again to beans and DynaBeans.
http://json-lib.sourceforge.net/index.html
http://www.apache.org/
分享到:
相关推荐
JSON介绍 JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式,易于人类读写,机器也易于解析和生成。它基于 JavaScript 编程语言标准 ECMA-262 第三版(1999 年 12 月)的子集,是一种文本格式,完全独立于...
json介绍和应用场景
json介绍更好的与ajax搭配是一款不错的数据格式转换文件
简单实用的json介绍教程
extjs入门教程 extjs入门教程介绍,GRID,json介绍
JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式。它采用完全独立于语言的文本格式,但也使用了类似于C家族语言(包括C、C++、C#、Java、JavaScript、Perl、Python等)的习惯,这些特性使JSON...
JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式,因其简洁和高效而广泛应用于Web服务和客户端之间的数据传输。JSON的设计目标是人可读、机器可解析,其语法源自JavaScript,但同时被设计成语言...
python 17、AJAX异步 2-2_使用AJAX发送POST请求、JSON介绍、JSON在前后端的处理.mp4
介绍了AJax中传输数据的一种新形式:JSON
JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式,源于ECMAScript语言标准,主要用于在网络上传输数据。由于其简洁、易读、易编写,并且与多种编程语言兼容,因此在现代Web开发中广泛应用。 ...
JSON对象可以通过`JSON.parse()`方法从JSON字符串转换成JavaScript对象,反之,`JSON.stringify()`方法可以将JavaScript对象转换成JSON字符串。例如: ```javascript // JSON字符串 var jsonString = '{"firstname...
**二、JSON介绍** JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,数据格式直观,可以直接被JavaScript解析为对象。JSON格式的基本结构包括对象(键值...
JSON是一种轻量级的数据交换格式。所谓轻量级,一是指这种格式不需要特定的容器,二是运行时占用很少的资源。JavaScript语言可以直接读取JSON数据格式的内容,所以在Web2.0中JSON有着广泛的应用。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集...
#### 一、Json介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它源自于ECMAScript的一个子集,旨在提供一种简单且高效的方式来处理数据。JSON的数据格式是文本形式,这意味着它可以独立于...
##### 1.1 JSON介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它被广泛用于服务端与客户端之间的数据交互。JSON基于ECMAScript规范的一个子集,采用了一种完全独立于编程语言的文本格式来...
2. **JSON介绍**: - **数据格式**:JSON是一种轻量级的数据格式,由大括号{}包围的对象和方括号[]包围的数组组成,键值对以冒号分隔,每个元素之间以逗号分隔。 - **易读性**:JSON的语法与JavaScript对象相似,...