JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用彻底独立于语言的文本格式,可是也使用了相似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。 javascript
JSON建构于两种结构: html
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在一样基于这些结构的编程语言之间交换成为可能。 java
JSON具备如下这些形式: 编程
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每一个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。 json
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。 数组
值(value)能够是双引号括起来的字符串(string)、数值(number)、true
、false
、 null
、对象(object)或者数组(array)。这些结构能够嵌套。 数据结构
字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。 编程语言
字符串(string)与C或者Java的字符串很是类似。 工具
数值(number)也与C或者Java的数值很是类似。除去不曾使用的八进制与十六进制格式。除去一些编码细节。 编码
空白能够加入到任何符号之间。 如下描述了完整的语言。
{ "firstName": "Brett" }
{ "firstName": "Brett", "lastName":"McLaughlin", "age": 123 }// ,分隔
{
"people"
: [
{
"firstName"
:
"Brett"
,
"lastName"
:
"McLaughlin"
,
"email"
:
"aaaa"
}, //[] 数组
{
"firstName"
:
"Jason"
,
"lastName"
:
"Hunter"
,
"email"
:
"bbbb"
},
{
"firstName"
:
"Elliotte"
,
"lastName"
:
"Harold"
,
"email"
:
"cccc"
}
]}
{
"programmers"
: [
{
"firstName"
:
"Brett"
,
"lastName"
:
"McLaughlin"
,
"email"
:
"aaaa"
},
{
"firstName"
:
"Jason"
,
"lastName"
:
"Hunter"
,
"email"
:
"bbbb"
},
{
"firstName"
:
"Elliotte"
,
"lastName"
:
"Harold"
,
"email"
:
"cccc"
}
],
"authors"
: [
{
"firstName"
:
"Isaac"
,
"lastName"
:
"Asimov"
,
"genre"
:
"science fiction"
},
{
"firstName"
:
"Tad"
,
"lastName"
:
"Williams"
,
"genre"
:
"fantasy"
},
{
"firstName"
:
"Frank"
,
"lastName"
:
"Peretti"
,
"genre"
:
"christian fiction"
}
]
}
JSON 值能够是:
其余
◆可读性
JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。
◆可扩展性
XML天生有很好的扩展性,JSON固然也有,没有什么是XML能扩展,而JSON却不能。不过JSON在Javascript主场做战,能够存储Javascript复合对象,有着xml不可比拟的优点。
◆编码难度
XML有丰富的编码工具,好比Dom4j、JDom等,JSON也有提供的工具。无工具的状况下,相信熟练的开发人员同样能很快的写出想要的xml文档和JSON字符串,不过,xml文档要多不少结构上的字符。
◆解码难度
XML的解析方式有两种:
一是经过文档模型解析,也就是经过父标签索引出一组标记。例如:xmlData.getElementsByTagName("tagName"),可是这样是要在预先知道文档结构的状况下使用,没法进行通用的封装。
另一种方法是遍历节点(document 以及 childNodes)。这个能够经过递归来实现,不过解析出来的数据仍旧是形式各异,每每也不能知足预先的要求。
凡是这样可扩展的结构数据解析起来必定都很困难。
JSON也一样如此。若是预先知道JSON结构的状况下,使用JSON进行数据传递简直是太美妙了,能够写出很实用美观可读性强的代码。若是你是纯粹的前台开发人员,必定会很是喜欢JSON。可是若是你是一个应用开发人员,就不是那么喜欢了,毕竟xml才是真正的结构化标记语言,用于进行数据传递。
而若是不知道JSON的结构而去解析JSON的话,那简直是噩梦。费时费力不说,代码也会变得冗余拖沓,获得的结果也不尽人意。可是这样也不影响众多前台开发人员选择JSON。由于json.js中的toJSONString()就能够看到JSON的字符串结构。固然不是使用这个字符串,这样仍旧是噩梦。经常使用JSON的人看到这个字符串以后,就对JSON的结构很明了了,就更容易的操做JSON。