JSON基础知识
JSON数据格式
JSON的格式是有一组键值对形式的内容出现的,具体示例如下:
{
"conference":"OSCON",
"speechTitle":"JSON at Work",
"track":"Web APIS"
}
名称-值对具有以下特性:
- 每一个键名
- 位于冒号左边
- 是一个字符串,而且必须由双引号括起来
- 值位于冒号的左边。值的类型有很多,稍后介绍
JSON类型
在上面说到了名称-值对的数据类型。类型包括以下几种
1、对象
对象由名称-值组成。
示例1:展示一个地址的对象
{
"address":{
"line1":"55 any street",
"city":"Denver",
"counttry":"USA"
}
}
示例2:展示一个带有数组的对象
{
"user":{
"firstName":"zhang",
"lastName":"san",
"top":[
"JSON",
"REST",
"API"
]
}
}
对象具有以下特性:
- 由一组大括号组成,可以是空对象
- 由一些无序的名称-值对组成,以逗号分隔
- 可以内嵌在其他对象或数组中
2、数组
示例:一个内嵌其他对象和数组的数组,该数组描述了包含标题、长度和摘要信息的会议报告
{
"presentations":[
{
"title":"JSON at work",
"length":"90 min",
"abstract":[
"JSON is more than just a simple replacement for XML when you make an AJAX call"
],
"trak":"web apis"
},
{
"title":"JSON at work",
"length":"90 min",
"abstract":[
"JSON is more than just a simple replacement for XML when you make an AJAX call"
],
"trak":"web apis"
}
]
}
数组具有以下特征:
- 由中括号组成,可以是空数组
- 数组是有序的,多个数组之间用以逗号分隔
- 可以内嵌在其他数组或对象中
- 具有以0依次叠加的索引值
3、字符串
下面展示一些合法的字符串
[
"fred",
"fred\t",
"\b",
"",
"\t",
"\u004a"
]
注意:在这里显示的是源码,在实际运行中并不是这样的,对应如下
[ "fred", "fred ", "", "", " ", "J" ]
字符串具有以下特征:
- 由包含在双引号间的0个或多个Unicode字符组成。
- 由单引号引起来的字符串为非法字符串。
JSON字符串还可以包含由反斜杠转义的字符
\" 双引号
\\ 反斜杠
\/ 正斜杠
\b 退格
\f 换页
\n 换行
\r 回车
\t Tab制表符
\u 后跟4个十六进制数字表示一个Unicode字符
4、数值
以下展示一些合法的JSON数组
{
"age":24,
"a":299.99,
"a1":-1,
"b":0.02,
"c":1.23e11,
"c2":1.13e+11,
"d":6.023E23,
"d1":6.023E+23,
"e":10e-3,
"e":10E-3
}
注意:在这里显示的是源码,在实际运行中并不是这样的,对应如下
{ "age":24, "a":299.99, "a1":-1, "b":0.02, "c":123000000000, "c2":113000000000, "d":602300000000000000000000, "d1":602300000000000000000000, "e":0.01 }
数值遵循JavaScript的双精度浮点数格式,并且具有以下特征
- 数值永远是十进制(只能出现数组0~9),不能以0开头
- 数值可以存由小数点开头的小数部分
- 数值可以以10为低的指数,该指数由e和E来表示
- 与JavaScript不同,数值不能是NaN(非法数值),也不能是Infinity
5、布尔值
展示JSON的布尔值
{
"flag":true
}
布尔值具有以下特征:
- 只有两个字:true和false
- 冒号右边不需要使用引号
6、null
从技术上说,null并不是一种值类型,而是JSON中的一个特殊值。
{
"address":{
"line1":"555",
"line2":null
}
}
null具有以下特性:
- 不需要使用引号
- 表示某个属性没有值,使用null来进行占位
JSON的注释
一言以避之,JSON中没有注释。
在JSON刚开始时是支持注释的,在后面不久就移除了注释:
- 开发者认为注释没有什么用处
- JSON解析器对于注释解析存在困难
- 移除注释有助于JSON实现跨平台性
JSON文件及MIME类型
在JSON标准文档中,.json
就是文件系统中存储JSON的文件后缀名。
在媒体类型(MIME)中,文件传递格式为application/json
。
JSON编码规范
API设计者对JSON使用者提及简单说明了三点:
1、属性名
属性名中命名规范遵循以下两点要求:
- 小驼峰式命名法
- 以下划线分割的短语
当使用小驼峰命名法时,属性名是由单个或多个词拼接而成的一个属性名,其中除第一个此词外,其余每个词的第一个字符开头大写
2、日期类型的值
开发者考虑到使用JSON的程序员们可能来自不同国家,即使在一家公司也会存在使用不同日期格式的。从而采用所有时区一致的日期/时间处理机制并保持互操作性。
{
"dateRegistered":"2020-08-30T23:46:21-08:00"
}
3、经纬度值
google maps等地址信息API以及与地理信息系统相关的其他API会用到经纬度数据。为了保持一致,Google的JSON编码规范经纬度数据时遵循ISO 6709标准。
{
"empireStateBuliding":"40.748747-73.985547"
}