JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易读性、结构化和广泛支持性,被广泛应用于Web开发、配置文件、API响应等场景。以下是JSON文件的编写方法详解,涵盖语法规则、数据类型、示例及实用技巧。
一、JSON文件的基本结构
JSON文件以纯文本形式存储数据,通常以 .json
为扩展名。其核心结构是键值对(Key-Value Pair),用大括号 {}
包裹对象,中括号 []
包裹数组。
1. 基本语法规则
- 键(Key):必须是字符串类型,用双引号
""
包裹。 - 值(Value):支持多种数据类型(见下文)。
- 分隔符:键值对之间用冒号
:
分隔,不同键值对用逗号,
分隔。 - 注释:JSON标准不支持注释,但部分解析器(如JSON5)允许单行注释
//
或多行注释/* */
。
2. 示例:简单JSON对象
json
{
"name": "Alice",
"age": 25,
"isStudent": false
}
二、JSON支持的数据类型
JSON支持以下6种数据类型:
类型 | 示例 | 说明 |
---|---|---|
字符串 | "Hello, JSON!" | 必须用双引号包裹。 |
数字 | 42 , 3.14 , -10 | 不支持十六进制或科学计数法。 |
布尔值 | true , false | 仅限小写。 |
对象 | {"key": "value"} | 嵌套结构,用 {} 包裹。 |
数组 | [1, 2, 3] | 有序集合,用 [] 包裹。 |
null | null | 表示空值。 |
1. 嵌套对象示例
{
"person": {
"name": "Bob",
"address": {
"city": "New York",
"zip": "10001"
}
}
}
2. 数组示例
{
"hobbies": ["reading", "coding", "hiking"],
"scores": [90, 85, 95]
}
3. 混合类型示例
{
"id": 1001,
"active": true,
"tags": ["admin", "user"],
"metadata": {
"createdAt": "2023-01-01",
"updatedAt": null
}
}
三、JSON文件的编写步骤
确定数据结构- 分析需要存储的数据类型(如对象、数组)及其关系。
- 示例:存储用户信息(姓名、年龄、邮箱列表)。
- 定义键值对
- 为每个数据项命名键(如
"name"
、"emails"
)。 - 根据数据类型选择对应的值格式。
- 为每个数据项命名键(如
- 处理嵌套与数组
- 对象嵌套:用
{}
包裹子对象。 - 数组:用
[]
包裹多个同类型值。
- 对象嵌套:用
- 验证格式
- 使用在线工具(如 JSONLint)检查语法错误。
- 确保所有字符串用双引号,键名唯一,无尾随逗号。
示例:编写用户信息JSON
{
"user": {
"id": "U12345",
"profile": {
"name": "Charlie",
"age": 30,
"isVerified": true
},
"contacts": [
"charlie@example.com",
"+1-202-555-0199"
]
}
}
四、常见错误与避坑指南
单引号问题- ❌ 错误:
{'name': 'Alice'}
- ✅ 正确:
{"name": "Alice"}
- 原因:JSON标准仅支持双引号。
- ❌ 错误:
- 尾随逗号
- ❌ 错误:
{ "a": 1, "b": 2, }
- ✅ 正确:删除最后一个逗号。
- ❌ 错误:
- 未转义特殊字符
- ❌ 错误:
{"message": "Hello\nWorld"}
(\n
未转义) - ✅ 正确:
{ "message": "Hello\\nWorld" }
- 或使用Unicode转义:
{ "message": "Hello\u000AWorld" }
- ❌ 错误:
- 数据类型混淆
- ❌ 错误:
{"age": "25"}
(年龄应为数字) - ✅ 正确:
{"age": 25}
- ❌ 错误:
五、实用技巧与工具
- 格式化与压缩
- 格式化:使用工具(如 JSON Formatter)美化缩进。
- 压缩:删除空格和换行以减少文件大小(适用于生产环境)。
- 快速校验检查是否存在格式错误
六、JSON与类似格式的对比
特性 | JSON | XML | YAML |
---|---|---|---|
可读性 | 高(简洁) | 中(标签冗余) | 极高(缩进敏感) |
注释支持 | ❌(标准不支持) | ✅ | ✅ |
数据类型 | 6种(基础类型) | 任意(需标签定义) | 类似JSON,支持更多 |
适用场景 | API、配置、Web | 文档、复杂数据交换 | 配置文件(如K8s) |
七、完整示例:配置文件
{
"app": {
"name": "MyApp",
"version": "1.0.0",
"settings": {
"debugMode": false,
"timeout": 30000
},
"endpoints": [
"https://api.example.com/v1",
"https://backup-api.example.com/v1"
]
}
}
通过遵循上述规则和技巧,你可以高效编写出结构清晰、错误少的JSON文件。