这是理解和编写 JSON 格式配置文件的快速参考备忘单。
入门
介绍
JSON 是一种基于文本的轻量级开放标准,专为人类可读的数据交换而设计。
- JSON 代表 JavaScript 对象表示法
- JSON 易于读写。
- JSON 是与语言无关的数据交换格式
- JSON 文件扩展名为
.json
- JSON Internet 媒体类型为
application/json
示例
1 2 3 4 5 6 7 8 9 10 11 12
| { "name": "Jason", "age": 39, "height": 1.92, "gender": "M", "salary": 70000, "married": true, "children": [ {"name": "Tom", "age": 9}, {"name": "Ava", "age": 7} ] }
|
类型
类型 |
描述 |
Number |
双精度浮点 |
String |
字符系列 |
Boolean |
“true”或“false” |
Array |
有序的值序列 |
Value |
字符串、数字、布尔值、空值等 |
Object |
键/值对的无序集合 |
null |
Null 或 Empty |
字符串
|
|
\" |
双引号 Double quote |
\\ |
反斜杠 Backslash |
\/ |
正斜杠 Forward slash |
\b |
退格 Backspace |
\f |
换页 Form feed |
\n |
换行 Newline |
\r |
回车 Carriage return |
\t |
标签 Tab |
\u |
后跟四个十六进制数字 |
示例
1 2 3 4 5
| { "url": "https://jaywcjlove.github.io", "msg" : "Hi,\n\"Quick Reference\"", "intro": "为开发人员分享快速参考和备忘单" }
|
无效字符串
Have to be delimited by double quotes
数字
类型 |
说明 |
Integer |
数字 1-9、0 和正数或负数 |
Fraction |
0.3、3.9 等分数 |
Exponent |
指数,如 e、e+、e-、E、E+、E |
示例
1 2 3 4 5 6 7
| { "positive" : 12, "negative" : -1, "fraction" : 10.25, "exponent" : 1.0E+2, "zero" : 0 }
|
无效的数字
在JSON中,只能使用十进制文字
对象 Objects
1 2 3 4 5 6 7 8 9 10
| { "color": "Purple", "id": "210", "composition": { "R": 70, "G": 39, "B": 89 }, "empty_object": {} }
|
用逗号分隔的多个键/值对
数组 Arrays
以 [
开始并以 ]
结束
对象数组
1 2 3 4 5 6
| { "children": [ { "name": "Jimmy Smith", "age": 15 }, { "name": "Sammy Sosa", "age": 12 } ] }
|
数组对象
1 2 3 4 5
| { "attributes": ["a1", "a2"], "methods": ["getter", "setter"], "empty_array": [] }
|
二维阵列
1 2 3 4 5 6 7 8
| { "my_sequences": [ [1, 2, 3], [4, 5, 6], [7, 8, 9, 0], [10, 11] ] }
|
对象的对象
1 2 3 4 5 6 7 8 9 10
| { "Mark McGwire": { "hr": 65, "avg": 0.278 }, "Sammy Sosa": { "hr": 63, "avg": 0.288 } }
|
嵌套
1 2 3 4 5 6 7 8 9 10 11
| { "Jack": { "id": 1, "name": "Franc", "salary": 25000, "hobby": ["a", "b"], "location": { "country": "A", "city": "A-A" } } }
|
JSON 5
Objects
对象键可以是 ECMAScript 5.1 IdentifierName
1 2 3 4
| { width: 1920, height: 1080, }
|
数组可以有一个尾随逗号
1 2 3 4 5
| [ 1, true, 'three', ]
|
允许单行和多行注释
多行注释
允许附加空白字符
代码点 |
描述 |
U+0009 |
水平制表符 |
U+000A |
换行符 |
U+000B |
垂直制表符 |
U+000C |
换页符 |
U+000D |
回车符 |
U+0020 |
空格 |
U+00A0 |
不间断空格 |
U+2028 |
行分隔符 |
U+2029 |
段落分隔符 |
U+FEFF |
字节顺序标记 |
Unicode Zs 类别 |
空格分隔符 Unicode 类别中的任何其他字符 |
数字
数字可能有前导或尾随小数点
1 2 3 4 5 6
| { integer: 123, withFractionPart: 123.456, onlyFractionPart: .456, withExponent: 123e-456, }
|
数字可以是十六进制
1 2 3 4
| { positiveHex: 0xdecaf, negativeHex: -0xC0FFEE, }
|
数字可以是正无穷大、负无穷大和 NaN。
1 2 3 4 5
| { positiveInfinity: Infinity, negativeInfinity: -Infinity, notANumber: NaN, }
|
数字可以以明确的加号开头
字符串
1 2
| 'Lorem ipsum dolor sit amet, \ consectetur adipiscing elit.'
|
以下是代表相同的意思
1
| 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
以下是代表相同的意思
在 JavaScript 中访问 JSON
访问对象
1 2 3 4 5 6 7 8
| let myObject = { "name": "Jason", "last": "Doe", "age": 39, "gender": "M", "salary": 70000, "married": true };
|
|
|
myObject.name |
“Jason” |
myObject["name"] |
“Jason” |
myObject.age |
39 |
myObject.other |
undefined |
myObject[0] |
undefined |
访问嵌套
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| let myObject = { "ref": { "name": 0, "last": 1, "age": 2, "gender": 3, "salary": 4, "married": 5 }, "jdoe": [ "Jason", "Doe", 39, "M", 70000, true ], "jsmith": [ "Tom", "Smith", 42, "F", 80000, true ] };
|
|
|
myObject.ref.age |
2 |
myObject["ref"]["age"] |
2 |
myObject.jdoe |
[“Jason”, “Doe”, 39 …] |
myObject.jsmith[3] |
“F” |
myObject[1] |
undefined |
访问对象数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| let myArray = [ { "name": "Jason", "last": "Doe", "age": 39, "gender": "M", "salary": 70000, "married": true }, { "name": "Tom", "last": "Smith", "age": 42, "gender": "F", "salary": 80000, "married": true }, { "name": "Amy", "last": "Burnquist", "age": 29, "gender": "F", "salary": 60000, "married": false } ];
|
|
|
myArray[0] |
{ “name”: “Jason”, …} |
myArray[1].name |
“Tom” |
myArray[1][2] |
42 |
myArray[3] |
undefined |
myArray[3].gender |
TypeError: Cannot read… |
访问阵列
1 2 3 4 5 6 7 8
| let myArray = [ "Jason", "Doe", 39, "M", 70000, true ];
|
|
|
myArray[1] |
“Doe” |
myArray[5] |
true |
myArray[6] |
undefined |
另见