这是理解和编写 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": "为开发人员分享快速参考和备忘单"
}

无效字符串

1
{ "foo": 'bar' }

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
}

无效的数字

1
{ "foo": 0xFF }

在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
[1, 2, 3, 4, 5]

[ 开始并以 ] 结束

对象数组

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',
]

允许单行和多行注释

1
2
3
4
{
// 一行注释
"name": "Kenny"
}

多行注释

1
2
3
4
5
{
/* 这是一个
多行注释 */
"name": "Kenny"
}

允许附加空白字符

代码点 描述
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.'
1
'\A\C\/\D\C'

以下是代表相同的意思

1
'AC/DC'

在 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

另见


评论
avatar
竹山一叶
技术分享 个人心得
Follow Me
公告
欢迎光临小站,这里是我日常工作和学习中收集和整理的总结,希望能对你有所帮助:)

本站的内容经过个人加工总结而来,也参考了网友们分享的资料,如有侵权,请第一时间联系我,我将及时进行修改或删除😊
文章归档文章分类文章标签复制本文标题复制本文地址
随便逛逛