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 是一种用于数据交换的文本格式,诞生于 2001 年由Douglas Crockford提出,目的是取代繁琐笨重的XML格式。这种格式不仅人很容易进行阅读和编写,同时机器也很容易解析和生成,是当前十分流行的数据格式,尤其是在前端领域。
- JSON,全称是 Javascript Object Notation,即 Javascript 对象标记法。这是一种 轻量级
(Light-Weight)、 基于文本的 (Text-based)、 可读的 (Human-Readable)格式。
- JSON 无论对于人,还是对于机器来说,都是十分便于阅读和书写的,而且相比 XML 文件更小;
- JSON 格式的创始人声称此格式永远不升级,这就表示这种格式具有长时间的稳定性;
- JSON格式有两个显著的优点:书写简单,一目了然;符合Javascript原生语法,可以由解释引擎直接处理,不用另外添加解析代码。
- JSON已经成为各大网站交换数据的标准格式,并被写入ECMAscript 5,成为标准的一部分。
简单说,每个JSON对象,就是一个值。要么是简单类型的值,要么是复合类型的值,但是只能是一个值,不能是两个或更多的值。这就是说,每个JSON文档只能包含一个值。
JSON对值的类型和格式有严格的规定- 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
- 简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity,
-Infinity和undefined)。 - 字符串必须使用双引号表示,不能使用单引号。
- 对象的键名必须放在双引号里面。
- 数组或对象最后一个成员的后面,不能加逗号。
PS: 需要注意的是,空数组和空对象都是合格的JSON值,null本身也是一个合格的JSON值。
JSON 的语法规则JSON 的语法规则十分简单,可称得上“优雅完美”,总结起来有:
-
数组(Array)用方括号(“[]”)表示。
-
对象(Object)用大括号(”{}”)表示。
-
名称/值对(name/value)组合成数组和对象。
-
名称(name)置于双引号中,值(value)有字符串、数值、布尔值、null、对象和数组。
-
并列的数据之间用逗号(“,”)分隔
//json对象
{
"name": "Geoff Lui",
"age": 26,
"isChinese": true
}
//“名称/值对”里,值可以是数组和对象,例如:
{
"name": "Geoff Lui",
"age": 26,
"isChinese": true,
"friends":["Lucy", "Lily", "Gwen"],
"Mother": {
"name": "Mary Lui",
"age": 54
}
}
ES5新增了JSON对象,用来处理JSON格式数据。它有两个方法:JSON.stringify()和JSON.parse()。
JSON建构于两种结构:“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
对象是一个无序的“‘名称/值’对”集合。一个对象以 {左括号 开始, }右括号 结束。每个“名称”后跟一个 :冒号 ;“‘名称/值’ 对”之间使用 ,逗号 分隔。
数组是值(value)的有序集合。一个数组以 [左中括号 开始, ]右中括号 结束。值之间使用 ,逗号 分隔。
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
字符串(string)与C或者Java的字符串非常相似。
数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
空白可以加入到任何符号之间。 以下描述了完整的语言。
A-Tione的博客
json官方文档
怎么理解json



