简析基于JavaScript的轻量级数据交换格式-JSON
JSON简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
JSON结构
1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
JSON具体形式
1、对象是一个无序的“‘名称/值’对”集合。一个对象以“{”开始,以“}”结束。每个“名称”后跟一个“:”,“‘名称/值’对”之间使用“,”分隔。例:{name:value}
2、数组是值(value)的有序集合。一个数组以“[”开始,“]”结束。值之间使用“,”分隔。例: [collection, collection]
3、值(value)可以是双引号括起来的字符串(String)、数值(number)、true、false、null、对象(object)或者数组(array)。这些结构可以嵌套。
4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜体转义。一个字符(character)即一个单独的字符串(characeter string).
JSON与XML
1 JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。
2 XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
3 XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
4 XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。
现假设有一个用户数据包括:用户名、密码、所在部门、性别、年龄。
用XML表示如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<user>
<name>张三 </name>
<password>123456</password>
<department>技术部</department>
<sex>男</sex>
<old>30</old>
</user>
用JSON表示如下:
{
“name”:”张三”,
“password”:”123456″,
“department”:”技术部”,
“sex”:”男”,
“old”:”28″
}
与XML一样,JSON也是基于文本的,且它们都使用Unicode编码,同样具有可读性。XML比较适合于标记文档,而JSON却更适合于时行数据交换处理。
JavaScript的eval()
?
由于JSON在语法上是JavaScript的子集和,所以其一般用eval()作为读取资料的方式,致使存在跨站的安全问题。
一种防止不安全代码的解决办法是透过parseJSON()读取JSON资料,parseJSON采用解析器验证读入的代码是否是JSON代码,但这样会在速度上比eval()慢。同样道理,跨站存取也存在于JSON,由于Javascript采用了称为“沙盒”的机制,这种机制限制Javascript引擎仅能引入同一个站点的代码,因而某种程度上提高了安全性。


评论
还没有评论。
发表评论