JavaScript Object Notation(JSON)(JavaScript对象表示法)。是一种用于结构化数据序列化的文本格式,源自JavaScript的对象文字。 JSON 的设计目标是最小化、可移植化和文本化JavaScript的子集。
JSON 可以表示四种基本类型(字符串、数字、布尔值和 null)和两种结构化类型(对象和数组)。 字符串是零个或多个 Unicode 字符 [ UNICODE ] 的序列。对象是零个或多个名称/值对的无序集,其中名称是字符串,值是字符串、数字、布尔值、null、对象或数组。 数组是零个或多个值的有序序列。
1.JSON Grammer
JSON文本是一个序列化的对象或数组。tokens集包括六个结构字符、字符串、数字和三个文字名称。
六个结构字符:
begin-array
:代表左方括号字符[
,用于开始一个JSON数组。end-array
:代表右方括号字符]
,用于结束一个JSON数组。begin-object
:代表左花括号字符{
,用于开始一个JSON对象(键值对集合)。end-object
:代表右花括号字符}
,用于结束一个JSON对象。name-separator
:代表冒号字符:
,用于分隔JSON对象中的键(名称)和值。value-separator
:代表逗号字符,
,用于分隔JSON数组中的元素或JSON对象中的键值对。
空白字符:
'ws'表示一个空白字符序列,可以由以下四种字符之一组成:
%x20
:表示 ASCII 码为 20 的空格字符。%x09
:表示 ASCII 码为 09 的水平制表符(Horizontal Tab)字符。%x0A
:表示 ASCII 码为 0A 的换行(New Line)字符。%x0D
:表示 ASCII 码为 0D 的回车(Carriage Return)字符。
1.1 JSON的值
必须是对象、数组、数字或字符串,或以下三个字面值名称之一:false、null、true(必须小写),即value = false / null / true / object / array / number / string
1.2 对象Objects
由begin-object和end-object('{ }'包围)
之间的零个或多个member组成。
member:表示一个名称/值对或成员,由一个字符串(名称)和一个值(可以是任意JSON值)组成,两者由name-separator(' : ')分隔,值后面可以由value-separator(' , ')分隔。
1.3数组
数组结构表示为包含零个或多个值(或元素)的方括号,元素之间用逗号分隔。
1.4数字
表示:
- 整数部分:可以有一个可选的负号(减号)作为前缀。
- 小数部分:可以包含一个小数点,后面跟着一个或多个数字。
- 指数部分:可以包含一个大小写字母 E,后面可以跟着一个可选的正负号,然后是一个或多个数字。
约束:
- 不允许使用八进制和十六进制形式的数字。
- 不允许在数字前面有前导零(即前面多余的零)。
- 不允许表示不能用数字序列表示的数值,比如 Infinity 和 NaN
1.5 字符串
- 字符串以引号(quotation marks)开始和结束。使用双引号表示字符串,不允许使用单引号。
- 在引号之间可以包含任意Unicode字符,但必须对某些特殊字符进行转义,包括引号自身、反斜杠和控制字符(U+0000到U+001F范围内的字符)。
- 可以对任意字符进行转义。对于位于基本多文种平面(Basic Multilingual Plane,U+0000到U+FFFF范围内)的字符,可以用六个字符的序列来表示:反斜杠,后跟小写字母'u',然后是四个十六进制数字,表示字符的代码点。十六进制的字母A到F可以是大写或小写。例如,只包含单个反斜杠字符的字符串可以表示为"\u005C"。
- 另外,一些常用字符可以使用两个字符的转义序列表示。例如,只包含单个反斜杠字符的字符串可以更紧凑地表示为"\"。
- 对于不在基本多文种平面之外的扩展字符,需要使用十二个字符的序列来表示,编码为UTF-16代理对(surrogate pair)。例如,只包含G谱号字符(U+1D11E)的字符串可以表示为"\uD834\uDD1E"。
2.Encoding
JSON文本必须使用Unicode编码。默认的编码格式是UTF-8
(xx是非零字节)
3.例子
{ "Image": {
"Width": 800,
"Height": 600,
"Title": "View from 15th Floor",
"Thumbnail": {
"Url": "http://www.example.com/image/481989943",
"Height": 125,
"Width": "100"
},
"IDs": [116, 943, 234, 38793]
}
这是一个包含图片信息的JSON对象,其中包括图片的尺寸、标题、缩略图的URL和尺寸,以及一组图片ID。
[
{
"precision": "zip",
"Latitude": 37.7668,
"Longitude": -122.3959,
"Address": "",
"City": "SAN FRANCISCO",
"State": "CA",
"Zip": "94107",
"Country": "US"
},
{
"precision": "zip",
"Latitude": 37.371991,
"Longitude": -122.026020,
"Address": "",
"City": "SUNNYVALE",
"State": "CA",
"Zip": "94085",
"Country": "US"
}
]
这是一个包含两个元素的JSON数组。每个元素都表示一个位置的信息,包括经度、纬度以及所在城市、州、邮编等相关信息。