介绍JSON
2006-11-09 18:04 qy1141 阅读(377) 评论(0) 编辑 收藏 举报
相信大家在学习Ajax的时候,碰到数据类型转化的时候一般都会用到JSON,那么到底什么是JSON呢,经过鄙人查资料,总结如下:
JSON(javascript object notation)是一种轻量级的数据交换格式。易于人们的阅读,同时也易于机器的解析与生成,它基于Javascript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, Javascript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
JSON构建于这样的一种结构:名/值对的集合,在不同的语言中它被理解成对象,而在大部分语言中它被理解为数组。
JSON的形式如下:
对象:是一个无序的“名称/值”对集合,一个对象以“{”开始,以“}”结束。
名称/值对:名称后跟一个“:”,接着就应是这个名称对应的值,每个“名称/值”对以一个“,”分隔。 数组:是值的有序集合, 数组以“[”开始,以“]”结束,数组中的值以“,”分隔。
值:可以是双引号引起来的字符串(string),数值(number),对象,true,false,null,数组等。
字符串:是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
好了废话少说,来看一个用XML 和JSON 表示魔兽英雄名单。
用XML表示:
<魔兽争霸英雄>
<人族>
<英雄>
<名称>大法师</名称>
<智力>25</智力>
<力量>18</力量>
<敏捷>20</敏捷>
</英雄>
<英雄>
<名称>山丘之王</名称>
<智力>21</智力>
<力量>27</力量>
<敏捷>22</敏捷>
</英雄>
<英雄>
<名称>神圣骑士</名称>
<智力>20</智力>
<力量>28</力量>
<敏捷>23</敏捷>
</英雄>
<英雄>
<名称>血魔法师</名称>
<智力>24</智力>
<力量>20</力量>
<敏捷>25</敏捷>
</英雄>
</人族>
</魔兽争霸英雄>
用JSON表示:
{人族英雄:[
{
名称:"大法师",
智力:25,
力量:18,
敏捷:20
},
{
名称:"山丘之王",
智力:21,
力量:27,
敏捷:22
},
{
名称:"神圣骑士,
智力:20,
力量:28,
敏捷:23
},
{
名称:"血魔法师",
智力:24,
力量:20,
敏捷:26
}
]
}
可以通过方法parseJSON()来将字符串转换成一个对象,同样也可以用方法toJSONString()来将一个对象转换为一个字符串。注意:如果字符串不符合JSON规范,则用方法就会抛出异常。要使用这些方法,首先要引用json.js 。
JSON不仅减少了解析XML解析带来的性能问题和兼容性问题,而且对于Javascript来说非常容易使用,可以方便的通过遍历数组以及访问对象属性来获取数据,其可读性也不错,基本具备了结构化数据的性质。不得不说是一个很好的办法,而且事实上google maps就没有采用XML传递数据,而是采用了JSON方案。
链接 :http://www.json.org/ 。
JSON(javascript object notation)是一种轻量级的数据交换格式。易于人们的阅读,同时也易于机器的解析与生成,它基于Javascript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, Javascript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
JSON构建于这样的一种结构:名/值对的集合,在不同的语言中它被理解成对象,而在大部分语言中它被理解为数组。
JSON的形式如下:
对象:是一个无序的“名称/值”对集合,一个对象以“{”开始,以“}”结束。
名称/值对:名称后跟一个“:”,接着就应是这个名称对应的值,每个“名称/值”对以一个“,”分隔。 数组:是值的有序集合, 数组以“[”开始,以“]”结束,数组中的值以“,”分隔。
值:可以是双引号引起来的字符串(string),数值(number),对象,true,false,null,数组等。
字符串:是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
好了废话少说,来看一个用XML 和JSON 表示魔兽英雄名单。
用XML表示:
<魔兽争霸英雄>
<人族>
<英雄>
<名称>大法师</名称>
<智力>25</智力>
<力量>18</力量>
<敏捷>20</敏捷>
</英雄>
<英雄>
<名称>山丘之王</名称>
<智力>21</智力>
<力量>27</力量>
<敏捷>22</敏捷>
</英雄>
<英雄>
<名称>神圣骑士</名称>
<智力>20</智力>
<力量>28</力量>
<敏捷>23</敏捷>
</英雄>
<英雄>
<名称>血魔法师</名称>
<智力>24</智力>
<力量>20</力量>
<敏捷>25</敏捷>
</英雄>
</人族>
</魔兽争霸英雄>
用JSON表示:
{人族英雄:[
{
名称:"大法师",
智力:25,
力量:18,
敏捷:20
},
{
名称:"山丘之王",
智力:21,
力量:27,
敏捷:22
},
{
名称:"神圣骑士,
智力:20,
力量:28,
敏捷:23
},
{
名称:"血魔法师",
智力:24,
力量:20,
敏捷:26
}
]
}
可以通过方法parseJSON()来将字符串转换成一个对象,同样也可以用方法toJSONString()来将一个对象转换为一个字符串。注意:如果字符串不符合JSON规范,则用方法就会抛出异常。要使用这些方法,首先要引用json.js 。
JSON不仅减少了解析XML解析带来的性能问题和兼容性问题,而且对于Javascript来说非常容易使用,可以方便的通过遍历数组以及访问对象属性来获取数据,其可读性也不错,基本具备了结构化数据的性质。不得不说是一个很好的办法,而且事实上google maps就没有采用XML传递数据,而是采用了JSON方案。
链接 :http://www.json.org/ 。