1. JSON是一种按照 JavaScript 对象语法的数据格式,虽然它是基于 JavaScript 语法,但它独立于 JavaScript,这也是为什么许多程序环境能够读取(解读)和生成 JSON。
2. JSON 可以作为一个对象或者字符串存在,前者用于解读 JSON 中的数据,后者用于通过网络传输 JSON 数据。JavaScript 提供一个全局的 可访问的 JSON对象来对这两种数据进行转换。
备注: 将字符串转换为原生对象称为反序列化(deserialization),而将原生对象转换为可以通过网络传输的字符串称为序列化(serialization)。
3. 一个 JSON 对象可以被储存在它自己的文件中,这基本上就是一个文本文件,扩展名为 .json
,还有 application/json
MIME类型。
4.JSON结构:
JSON 是一个字符串,格式类似于 JavaScript 对象字面量的格式。你可以在 JSON 中包含与标准 JavaScript 对象相同的基本数据类型——字符串、数字、数组、布尔值和其他对象字面量。这使你可以构建一个数据层次结构:
{
"squadName": "Super hero squad",
"hometown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"
]
}
]
}
5. 如果我们把字符串加载到 JavaScript 程序中,并将其解析到一个名为 superHeroes
的变量,那么我们就可以使用在JavaScript对象基础文章中相同的点/括号表示法来访问其中的数据。例如:
superHeroes.hometown;
superHeroes["active"];
6. 为了访问层次结构中更深层次的数据,必须将所需的属性名和数组索引链接在一起。例如,访问 members 数组第二个英雄的第三个超能力,可以这样做:
superHeroes["members"][1]["powers"][2];
- 首先我们有变量名
superHeroes
,储存对象。 - 在对象中我们想访问
members
属性,所以我们使用["members"]
。 members
包含有对象数组,我们想要访问第二个元素,所以我们使用[1]
。- 在对象内,我们想访问
powers
属性,所以我们使用["powers"]
。 powers
属性是一个包含英雄技能的数组。我们想要第三个,所以我们使用[2]
。
完整代码:
const superHeroes={
"squadName": "Super hero squad",
"hometown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": ["Radiation resistance", "Turning tiny", "Radiation blast"]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"
]
}
]
}
结果展示: