介绍

我们知道AJAX技术能够使得每一次请求更加迅捷,对于每一次请求返回的不是整个页面,也仅仅是所需要返回的数据。通常AJAX通过返回XML格式的数据,然后再通过客户端复杂的JavaScript脚本解析和渲染这些XML格式的数据。

JSON(读Jason)是为了能够使得数据格式成为一种标准,更简单的被JavaScript解析。

 

优点

1、轻量级的数据交换格式

2、人们读写更加容易

3、易于机器的解析和生成

4、能够通过JavaScript中eval()函数解析JSON

5、JSON支持多语言。包括:ActionScript, C, C#, ColdFusion, E, Java, JavaScript, ML, Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Lua.

 

语法

JSON语法是一种用于传输和生成数据的协定,很类似于C家族的语言,所以很容易被C家族的语言所解析。

对象:对象包含在{}之间

属性:采用Key-Value对来表示。属性之间使用逗号分开。  string : value

数组:数组存放在[]之间   [ elements ]

元素:元素之间用逗号分开

值:值可以是字符串,数字,对象,数组,true,false,null

例子:JSON



 name:"Michael"
 email:"17bity@gmail.com"
 homepage:"http://www.google.com" 
}, 

 name:"John"
 email:"john@gmail.com"
 homepage:"http://www.google.com" 
}, 

 name:"Peggy"
 email:"peggy@gmail.com"
 homepage:"http://www.google.com" 

 

事实上google maps就没有采用XML传递数据,而是采用了JSON方案。

JSON的另外一个优势是”跨域性”,例如你在网页里使用

<script type=”text/javascript” src=”http://www.yyy.com/some.js”>

是完全可行的,这就意味着你可以跨域传递信息。而使用XMLHttpRequest却获取不了跨域的信息,这是Javascript内部的安全性质所限制的。

JSON能完全取代XML吗?当然不能,原因就在于XML的优势:通用性。要使服务器端产生语法合格的Javascript代码并不是很容易做到的,这主要发生在比较庞大的系统,服务器端和客户端有不同的开发人员。

 

JSON VS XML

 

可读性
JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。
可扩展性

XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

编码难度
XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。

解码难度
XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。

流行度
XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj  (Asynchronous JavaScript and JSON)了。

简单 JSON 示例

 按照最简单的形式,可以用下面这样的 JSON 表示名称/值对:

{ ”firstName”: ”Brett” }

这个示例非常基本,而且实际上比等效的纯文本名称/值对占用更多的空间:

firstName=Brett

但是,当将多个名称/值对串在一起时,JSON 就会体现出它的价值了.首先,可以创建包含多个名称/值对的记录,比如:

{ ”firstName”: ”Brett”, ”lastName”:”McLaughlin”, ”email”: ”brett@newInstance.com” }

 

 

从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

值的数组

当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在XML 中,需要许多开始标记和结束标记;如果使用典型的名称/值对(就像在本系列前面文章中看到的那种名称/值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName 这样的形式。

如果使用 JSON,就只需将多个带花括号的记录分组在一起:

{ ”programmers”: [ 
  { "firstName""Brett""lastName":"McLaughlin""email""brett@newInstance.com" }, 
  { "firstName""Jason""lastName":"Hunter""email""jason@servlets.com" }, 
  { "firstName""Elliotte""lastName":"Harold""email""elharo@macfaq.com" } 
 ], 
“authors”: [ 
  { "firstName""Isaac""lastName""Asimov""genre""science fiction" }, 
  { "firstName""Tad""lastName""Williams""genre""fantasy" }, 
  { "firstName""Frank""lastName""Peretti""genre""christian fiction" } 
 ], 
“musicians”: [ 
  { "firstName""Eric""lastName""Clapton""instrument""guitar" }, 
  { "firstName""Sergei""lastName""Rachmaninoff""instrument""piano" } 
 ] 

相关文章: