JSON 文本的多层嵌套格式要求
JSON 支持任意深度的嵌套。嵌套是通过在对象和数组中递归定义其他对象或数组实现的。以下是详细的语法和格式要求:
1. 基本结构
嵌套对象
JSON 对象的值可以是另一个 JSON 对象。每个对象由 {} 包裹,键必须是字符串,值可以是任意类型,包括另一个嵌套对象。示例:
{
"level1": {
"level2": {
"level3": {
"key": "value"
}
}
}
}
嵌套数组
JSON 数组的元素可以是另一个 JSON 数组。每个数组由 [] 包裹,可以包含任何类型的值,包括对象和嵌套数组。示例:
{
"array": [
["value1", "value2"],
["value3", "value4"]
]
}
2. 多层嵌套的对象与数组组合
对象中嵌套数组
对象的键可以对应一个数组,数组中的元素可以是对象或其他数组。示例:
{
"person": {
"name": "Alice",
"hobbies": ["reading", "traveling", "sports"],
"education": [
{
"degree": "Bachelor",
"field": "Computer Science",
"year": 2020
},
{
"degree": "Master",
"field": "Data Science",
"year": 2023
}
]
}
}
数组中嵌套对象
数组中的元素可以是 JSON 对象,JSON 对象中还可以嵌套其他对象或数组。示例:
[
{
"id": 1,
"name": "Alice",
"skills": ["Python", "Java", "SQL"]
},
{
"id": 2,
"name": "Bob",
"skills": ["C++", "JavaScript"],
"projects": [
{
"title": "Website Development",
"status": "Completed"
},
{
"title": "Machine Learning",
"status": "Ongoing"
}
]
}
]
3. 深度嵌套的规则
统一缩进:每层嵌套通常用 2 或 4 个空格缩进。避免循环引用:JSON 不支持对象的循环引用(即对象引用自身或通过嵌套层级间接引用自身)。层级清晰:嵌套层级应清晰,避免混乱或不必要的复杂度。空值处理:嵌套的层级中可以使用 null 表示没有值。示例:
{
"company": {
"name": "TechCorp",
"departments": [
{
"name": "Engineering",
"teams": [
{
"name": "Backend",
"members": [
{"name": "Alice", "role": "Engineer"},
{"name": "Bob", "role": "Team Lead"}
]
},
{
"name": "Frontend",
"members": null
}
]
},
{
"name": "HR",
"teams": []
}
]
}
}
4. 键值格式要求
键必须是字符串,用双引号包裹("key")。值可以是以下任意类型:
字符串(必须用双引号包裹)数字(整数或浮点数)布尔值(true 或 false)数组([])对象({})null5. 错误示例及修复
(1) 多层嵌套中对象缺少双引号
错误:
{
person: {
name: "Alice",
age: 30
}
}
修复:
{
"person": {
"name": "Alice",
"age": 30
}
}
(2) 嵌套中多余的逗号
错误:
{
"person": {
"name": "Alice",
"age": 30,
}
}
修复:
{
"person": {
"name": "Alice",
"age": 30
}
}
(3) 嵌套中值为非法类型
错误:
{
"person": {
"name": "Alice",
"age": NaN
}
}
修复:
{
"person": {
"name": "Alice",
"age": null
}
}
6. 注意事项
层级深度限制:虽然 JSON 理论上支持任意深度的嵌套,但大多数解析器对嵌套层级有限制(通常是 100 层以内)。性能问题:过多的嵌套会增加解析时间,降低性能。结构设计:在设计 JSON 结构时,应遵循扁平化原则,尽量减少嵌套层级,确保易读性和可维护性。7. 复杂嵌套的完整示例
示例:
{
"school": {
"name": "Greenwood High",
"address": {
"city": "New York",
"zipcode": "10001"
},
"students": [
{
"id": 1,
"name": "Alice",
"grades": {
"math": 90,
"science": 85,
"history": 88
},
"activities": ["chess", "soccer"]
},
{
"id": 2,
"name": "Bob",
"grades": {
"math": 78,
"science": 92,
"history": 81
},
"activities": null
}
]
}
}