客户端处理JSON响应
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,而且它是基于JavaScript 的。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript 等)。这些特性使JSON成为理想的数据交换语言。
JSON有两种结构:
“名/值”对的集合(A collection of name/value pairs)。在不同的语言中,它被理解为对象,结构,关联数组等
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
对象是一个无序的“名/值”对集合。一个对象以“{”开始,“}”结束。每个“名称”后跟一个“:” ;“名/值”对之间使用“,” 分隔:
数组是值(value)的有序集合。一个数组以“[”开始,“]”结束。值之间使用“,”分隔:
字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套
数值(number)与C或者Java的数值非常相似。
JSON示例
下面的JSON表示名称/值对:
{ "firstName": "Brett" }
多个名称/值对串在一起:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }
从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下 JSON
更容易使用,而且可读性更好
当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性:
{ “employees": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
] }
这比相应的XML格式表示的数据更加简洁:
在JavaScript中使用JSON:
JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的 API 或工具包。
将JSON数据赋值给变量:
var company =
{ “employees": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": brett@newInstance.com" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
]
};
这样将创建一个JavaScript对象
以JavaScript对象的方式访问数据,如获取第一个雇员的firstName信息:
company.employees[0].fristName
正如可以用点号和括号访问数据,也可以按照同样的方式轻松地修改数据:
company.employees[0].fristName=“Vincent”
服务器端返回JSON相应的文本表示,如:
{“city” : “Hefei”, “province” : “Anhui”}
客户端使用eval()函数将JSON文本转化为JavaScript对象:
注意,使用额外的圆括号可使eval()函数将来源输入无条件地视为表达式进行解析。
然后从JavaScript对象中取得相应的值:
document.getElementById("city").value=response.city;
document.getElementById("province").value=response.province;
JSON vs XML:
可读性
JSON和XML的可读性可谓不相上下,XML略占上风。
可扩展性
XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
编码难度
XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
解码难度
XML的解析得考虑子节点父节点关系,让人头昏眼花,而JSON的解析难度几乎为零。
流行度
XML已经被业界广泛的使用,而JSON才刚刚开始,但在Ajax领域,JSON凭借自身的优势有可能最终取代XML。
var sJson={
"product":
[
{
"temLink":"http://www.haiziwang.com/product/detail/59f41a5809084ed88d339825991ca253.html",
"imageLink":"http://www.haiziwang.com/images/product/59/f4/59f41a5809084ed88d339825991ca253_logo_n.jpg",
"itemPrice":"208.00 ",
"itemLink":"http://www.haiziwang.com/product/detail/59f41a5809084ed88d339825991ca253.html",
"itemName":"== 001==妈咪宝贝瞬吸干爽纸尿裤L男"
},
{
"temLink":"http://www.haiziwang.com/product/detail/530773ed236540e68b64fa81a10099d3.html",
"imageLink":"http://www.haiziwang.com/images/product/53/07/530773ed236540e68b64fa81a10099d3_logo_n.jpg",
"itemPrice":"138.00 ",
"itemLink":"http://www.haiziwang.com/product/detail/530773ed236540e68b64fa81a10099d3.html",
"itemName":"== 002==【含VA、VD及DHA关键营养】动力宝宝双鱼油60粒22.8g(1-3岁)"
},
{
"temLink":"http://www.haiziwang.com/product/detail/59f41a5809084ed88d339825991ca253.html",
"imageLink":"http://www.haiziwang.com/images/product/59/f4/59