简单XML与JSON的读取比较(转)
简单XML与JSON的读取比较(转)
当我们在定义AJAX服务的时候,对于各种各样的请求,应该以什么样的数据格式来响应哪?
当然如果是请求一段Markup代码的话,HTML就是最合适的,客户端请求到数据后,就可以直接插入到前端页面中了。那如果客户端需要的是纯粹的数据的话,我们是应该提供XML哪,还是JSON?这两者各有什么优缺点和好处哪,了解了这两者的差异后我们就可以基于实际情况进行权衡取舍了。
我们从以下几个方面来进行比较:
1、客户端
在客户端通过向服务器发送XMLHttpRequest,就可以得到请求数据了,哪什么样的数据格式更容易处理哪?
JSON示例:
{
"author" : "Gambardella, Matthew",
"title" : "XML Developer's Guide",
"genre" : "Computer"
}
对于JSON数据,只需要调用JavaScript的Eval方法就可以将JSON字符串序列化成为JavaScript对象,而后就可以直接访问了。如下所示:
var book = eval(request.responseText);
alert(book.author);
XML示例:
<book>
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
</book>
对于XML数据,其本身是一个DOM Tree的数据结构,开发人员必须使用DOM API来访问和处理XML数据;而且DOM在各个浏览器中的实现也不尽相同,所以针对XML DOM的编程方式会变的更为复杂。参见下面的实现方式:
var book = request.responseXML;
var authors = book.getElementsByTagName("author");
alert(authors[0].firstChild.textContent);
另外对于XMLDOM,浏览器目前还不支持类似于XPath这样的查询语句。显然对于XMLDOM数据的访问显然要比访问JSON复杂多了。
2、服务器端
在服务器端需要向客户端发送数据,什么样的数据格式处理起来更容易哪?
显然对于如何序列化或者犯序列化一个对象成为XML字符串,各种服务端的编程语言都有提供,而且还会有多种方式。例如.NET Framework就提供了XmlSerializer类来序列化一个对象成为Xml文档,另外开发人员还可以使用XmlWriter、XMLDocument来直接构建Xml字符串。
而对于JSON这样一种数据格式则鲜有提供,这就需要开发人员自己动手或者使用一些Open Source的Library。在复杂对象的序列化或者反序列化上,由于Xml做的比较早应该会更稳定一些。
在这点上XML会优于JSON.
3、安全性
JSON 本来是JavaScript的一个安全的子集,不会含有赋值和调用。因此在将JSON数据装换成为JavaScript对象的时候,我们包括许多JavaScript库都使用Eval函数。这意味着获取的JSON数据将被解析并执行,注意是执行,尤其有一些数据是来自用户输入的话,可能会带来意想不到的安全性问题。攻击者也可以利用这点发送畸形、恶意的 JSON数据,这样Eval函数就会执行这些恶意代码。
从这一点上来说也要求我们如果在使用JSON作为数据交换格式的时候,必须保障JSON安全。比较常见的办法是使用正则表达式来检查JSON数据是否包含有恶意代码关键字。
而XML则相对来讲更安全一些。
4、性能
从数据传输量上来看JSON显然要优于XML,JSON更轻量级一些,它没有像XML那样多的Open和Closing标记。同时在对数据的解析速度上,JSON也要优于XML。
5. 其他
另外从数据格式的验证角度来看的话,XML的验证技术更成熟,而目前关于JSON的验证还比较少。
XML的全称是eXtensible Markup Language,即可扩展标记语言,作为一种广泛推广的数据传输的标准手段,在Ajax设想之初就被确定为XMLHttpRequest传输数据的方式,了解XML技术的本质对于我们更好地运用Ajax也是很有意义的。
对于所熟悉的超文本标记语言,XML也是一种类似的标记语言,不同的是,在HTML的标记是在标准中已经规定了有些什么标记,各种标记代表什么意义,如<p>代表一个段落,它控制着文档在浏览器中应该如何显示;而在XML中,标记以及标记的值是由我们自己定义的,但是,XML不像HTML那样会控制浏览器的显示,它其实只是用来封装数据,并不关心界面的显示如何,实际上我们最后控制界面的显示还是由HTML来控制的,在很长一段时间内我们还是会使用HTML来展示数据,而XML提供了一种可以使页面显示与数据分离的方法,这样为我们面向对象的模块化编程提供了方便。下面是一段XML文档。
<?xml version="1.0" encoding="utf-8" ?> |
看到我们为文档的根节点定义为person,之下有name、sex、age三个子节点,从这一点可以看出,我们定义了一个XML文档之后,通过对文档标签的自定义,可以得到一个很具结构化并具有一定意义的数据文档,这为我们提供了一种很便捷的方式来包裹和交换数据。
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");//声明一个XML对象 |
在使用XMLHttpRequest发出请求以后,在服务端可以使程序返回一个XML文档,然后在前端脚本中解析XML,并使用DOM方法改变界面显示。
JSON:它的名字看起来似乎很亲切,全称为JavaScript Object Notation,可以看出它和JavaScript的关系非常密切。JSON是一种与JavaScript自然匹配的对象,它实际上是一种名称与值的集合,我们使用JavaScript中通常的对象访问方法就能对对象进行访问。
var jobj = {"person":{"name":"Dr Li","sex":"male","age":"24"}} |
通过大括号、冒号、逗号、引号等符号实例了一个JSON对象,每个冒号左边的是键,右边是值,JSON对象实际上就是一个键值对的集合。可以方便地通过类似jobj.person.name的方式访问对象中的每一个键对应的值。
还发现JSON对象相对于XML更为简洁,XML必须是封闭的标签对,而JSON只需要用一个打括号或者逗号就能说明元素的作用范围。这一点对于需要高效运行的Ajax是很重要的,一般来说使用JSON要比XML更节约带宽一些。
JSON在JavaScript中的灵活性与易用性,使得大多数Ajax编程人员都更愿意使用JSON作为Ajax传输数据的方法。在Ajax.NET提供的程序包里,我们会发现一个JSON版本的dll,使用这个dll回传数据使用的就是JSON。
文章出自《.NET Web高级开发》介绍的XML和JSON。
整理:http://hi.baidu.com/redgo
示例如下:
<script type="text/javascript" language="javascript">
var languages = {
cn:{
lang:'ch',
name:"中文"
},
en:{
lang:"英文",
name:"en"
}
};
document.write(languages.cn.name);
</script>
=====================================================================
请问有没有详细的js读取json的例子方法
//根据city获得name
function getNameByCity(city)
{
var cityName =
{
"0556":"安庆市",
"0372":"安阳市",
};
return cityName[city];
}
=====================================================================
js 中读取JSON的方法探讨
js读取JSON的方法我接触到的有两种:
方法一:函数构造定义法返回
var strJSON = "{name:'json name'}";//得到的JSON
var obj = new Function("return" + strJSON)();//转换后的JSON对象
alert(obj.name);//json name
方法二:js中著名的eval函数
var strJSON = "{name:'json name'}";//得到的JSON
var obj = eval( "(" + strJSON + ")" );//转换后的JSON对象
alert(obj.name);//json name
第二种方法需要注意的是,对象表达式{'name':'json name'}必须用“()”扩住,否则
var strJSON = "{name:'json name'}";
var obj = eval(strJSON);
alert(obj.constructor);//String 构造函数
alert(obj.name);//undefine
必须把对象表达式扩起来eval执行才能生成一个匿名对象!
另外http://www.ibm.com/developerworks/cn/web/wa-lo-json/
JOSN: JSON是结构化数据串行化的文本格式。它衍生自Javascript的对象实字,这定义在ECMAScript语言标准第三版中。JSON能够描述四种简单的类型(字符串、数字、布尔值及null)和两种结构化类型(对象及数组)。字符串(string)是零个或多个Unicode字符的序列。对象(object)是无次序的零个或多个名/值(name/value)对的集合,这里的name是string类型,value则可以是string、number、boolean、null、object或array类型。数组(array)是零个或多个value的有序序列。"object"和"array"这两个术语来自JavaScript规范。JSON的设计目标是使它成为小的、轻便的、文本的,而且是JavaScript的一个子集。 XML: XML是EXtensible Markup Language的缩写 XML是一种类似于HTML的标记语言 XML是用来描述数据的 XML的标记不是在XML中预定义的,你必须定义自己的标记 XML使用文档类型定义(DTD)或者模式(Schema)来描述数据 XML使用DTD或者Schema后就是自描述的语言 XML和HTML的主要区别是什么 XML是用来存放数据的 XML不是HTML的替代品,XML和HTML是两种不同用途的语言。 XML是被设计用来描述数据的,重点是:什么是数据,如何存放数据。 HTML是被设计用来显示数据的,重点是:显示数据以及如何显示数据更好上面。 HTML是与显示信息相关的, XML则是与描述信息相关的。 “XML”是用于网络上数据交换的语言,具有与描述Web页面的“HTML”语言相似的格式。该语言有“可以利用Web浏览器进行数据确认”以及“易于生成数据”等优点,因此主要用于在企业之间,或者在企业内部更加方便地进行数据交换和利用。首先为了便于理解,下面假设有这么一种情况:某图书销售商要着手建立自己的站点,并发送书店里的品种目录和库存情况等信息。 管理图书时,需要使用TABLE标签等,以一览表的形式提供 “书名”、“发行日期”、“库存”、“作者”、“出版社”和“定价”等数据。以这种形式汇总数据后,如果是人,就能够迅速地了解到各自所需的内容。但是,计算机(或系统)即使能够理解页面结构或数据布局,也无法理解这里的数据是什么意义(属性)。 然而,“XML”则正是能够让计算机也理解这些数据属性的技术。 如果使用XML,比如“库存目前有多少?”以及“某个作家写的书卖了多少册?”等数据就能够由计算机“自动地”掌握,并能够将这些数据与交易对象“共享”。这样一来,出版社就能够在制定今后的出版计划时参考这些数据,而且销售公司制定有效的配送计划时也将更加容易。这就必定大大有助于削减人事成本,以及提高管理效率。 当然,即便不使用XML,比如,如果能够建立一个规范的数据库,并为每个字段定义一个“书名”和“定价”等名称,计算机也能够理解。但是要想在Web上实现这一点,却要花费相当的人力和成本。在这一点上,如果是XML,由于“能够利用Web浏览器对数据进行确认“,因此只要拥有能够连接因特网的计算机和支持XML的浏览器,就不需再进行特别的投资。 使用XML,还能够将在以前的数据库中难以处理的数据转化成数据库。 XML的描述方式与HTML相同,利用被括号<>括起来的字符串进行描述。在HTML中,括号内所定义的都是版面(Layout)等信息。而XML则同时定义了数据的属性,比如刚才提到的图书,就是以<书名>、<作者>和<出版社>等方式定义。像这样的定义方式可以自由设置。因此,甚至有不少企业自己定义XML,然后将其用于本公司内部的数据交换。自由度如此之高也是XML受到极大关注的原因之一。 但是,企业之间的数据交换才是XML的着眼点之一。因此,各公司的定义如果不规范化就无法通用。目前,以微软为主的标准化团体“Biztalk.org”和民间团体“Rosetta Net”等都希望能针对各行业和领域制定“可以广泛利用的标志”,以减少定义XML的麻烦。 如果像上述所说的那样能够制定XML的标准,并被广泛应用,那么不止是企业之间的数据交换将变得更简单,而且语音数据和动态图像数据等在过去的数据库中难以进行处理的数据也必将能够轻松转化成数据库。这一点在管理方面也可以说是一个巨大的可取之处