Json
JavaScript Object Notation (JSON)
是一个轻量级的,基于文本的,跨语言的数据交换格式
。它从ECMAScript编程语言标准(ECMAScript Programming Language Standard)衍生而来。JSON定义了一组用于表示结构化数据的可移植的格式化规则。
简介
JSON是用于结构化数据序列化的一种文本格式,JSON包含4种基础类型(字符串,数字,布尔和null)和两种结构类型(对象和数组)。字符串
是一个由零或者多个Unicode字符组成的序列。对象
是一个由零或者多个名/值对组成的无序集合,其中名/值对中名是字符串类型,值则可以是字符串,数字,布尔,null,对象或数组类型。数组
是一个由零或者多个值组成的有序序列。
JSON的设计目标
是它应当是尽可能小的,可移植的,文本化的,并且可以作为JavaScript的一个子集。
JSON语法
一个JSON文本是一个标记(token)序列,标记包含6种结构字符
,字符串,数字和3个字面量。
结构字符
:[ 左中括号,{ 左大括号, ] 右中括号, } 右大扩号,: 冒号,, 逗号。6种结构字符前后都可以添加无意义的空白字符。如:水平制表符\t,换行符\n,回车符\r字面量
: false,null,true。字面量MUST是小写的,其他任何字面量都是不允许的。对象
结构表示为一对大括号包裹着0到多个键/值对(或者叫成员)。键/值对中键是一个字符串,后面是一个冒号,用来分隔键和值。值后面是一个逗号用来分隔值和下一个键/值对的键。一个对象内的键SHOULD是唯一的。数组
结构表示为一对中括号包裹着0到多个值(或者叫元素)。值之间用逗号分隔。数字
的表示和其他大部分语言相似。数字包含一个以可选的减号为前缀的整数部分,其后面可以跟有小数部分和或指数部分。八进制或者十六进制的形式是不允许的。以0开头也是不允许的。小数部分是一个小数点后跟随一位或多位数字。指数部分以不限大小写的字母E开头,之后可跟一个加号或减号。E和可选的符号后可跟一位或多位数字。不能被表示为数字的序列(例如,无穷大和NaN)的数字值是不允许的。字符串
用引号作为开头和结尾。除了以下一些必须被转义的字符以外所有的Unicode字符都可以直接被放在字符串中:引号(”或’),反斜杠(\)和控制字符(U+0000 到 U+001F)。
编码
JSON文本SHALL使用unicode编码。默认的编码方式为UTF-8。
由于JSON文本的头两个字符一定是ASCII字符[RFC0020],因此可以通过观察第一组4个8位字节来判断字节流是UTF-8,UTF-16(BE或LE)还是UTF-32(BE或LE)编码的。
解析器
JSON解析器可以将JSON文本转换为其他表示方法。JSON解释器MUST能接受符合JSON语法的所有文本。JSON解析器MAY能接受非JSON形式的文本。
生成器
JSON生成器能够生成JSON文本。其生成结果MUST严格符合JSON的语法。
IANA(互联网数字分配机构)方面的考虑
JSON文本的MIME媒体类型是application/json。JSON可以用UTF-8,UTF-16和UTF-32编码表示。如果使用UTF-8,则JSON是8位字节兼容的。如果是UTF-16或UTF-32,则必须使用二进制内容传输编码。
通常,脚本语言都有安全问题,JSON作为JavaScript的一个子集,但由于它排除了分配和调用,所以它是安全的。
JSON发布规范:RFC 4627
Json示例
{
"Image": {
"Width": 800,
"Height": 600,
"Title": "View from 15th Floor",
"Thumbnail": {
"Url": "http://www.example.com/image/481989943",
"Height": 125,
"Width": "100"
},
"tags": [
"小清新",
"动物"
]
}
}
参考规范
[ECMA] European Computer Manufacturers Association, “ECMAScript
Language Specification 3rd Edition”, December 1999,
<http://www.ecma-international.org/publications/files/
ecma-st/ECMA-262.pdf>.[RFC0020] Cerf, V., “ASCII format for network interchange”, RFC 20,
October 1969.[RFC2119] Bradner, S., “Key words for use in RFCs to Indicate
Requirement Levels”, BCP 14, RFC 2119, March 1997.[RFC4234] Crocker, D. and P. Overell, “Augmented BNF for Syntax
Specifications: ABNF”, RFC 4234, October 2005.
原文参考:Json格式定义
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。