如何写一个JSON:从基础到实践的完整指南
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁、易读、易于机器解析和生成,成为Web开发、API通信、配置文件等场景中的主流数据格式,无论是前后端数据交互,还是存储结构化数据,JSON的写法都是开发者的必备技能,本文将从JSON的基础概念、核心规则、实战案例到常见错误,带你全面学会如何写一个规范的JSON。
JSON是什么?为什么需要它?
JSON本质上是一种文本格式,用于表示结构化数据,它基于JavaScript的一个子集,但独立于语言,几乎所有编程语言(如Python、Java、C#、Go等)都支持JSON的解析和生成,它的核心优势包括:
- 易读性:结构清晰,接近自然语言,便于人类阅读和调试。
- 轻量级:相比XML等格式,JSON没有冗余标签,数据更紧凑。
- 通用性:跨语言、跨平台支持,是API通信(如RESTful API)的标准数据格式。
- 灵活性:可以表示复杂的数据结构,如嵌套对象、数组等。
JSON的核心语法规则:写好JSON的“宪法”
JSON的语法非常严格,必须遵循以下规则,否则会导致解析失败,以下是JSON的5种基本数据类型和2种结构:
基本数据类型:JSON的“原子元素”
JSON支持5种基本数据类型,用于表示最简单的数据值:
| 类型 | 示例 | 说明 |
|---|---|---|
| 字符串 | "name": "张三" |
必须用双引号()包围,不能用单引号()。 |
| 数字 | "age": 25 |
整数或浮点数,无需引号,不支持科学计数法(如1e3)。 |
| 布尔值 | "isStudent": true |
只能是true或false(全小写),不能是True或1。 |
| null | "phone": null |
表示“空值”,必须是小写的null,不能是NULL或None。 |
| 数组 | "hobbies": ["reading", "sports"] | 有序集合,值用逗号分隔,整体用方括号([]`)包围。 |
复合数据类型:JSON的“结构骨架”
JSON通过两种复合结构组织数据,实现复杂表达:
(1)对象(Object):键值对的集合
- 用花括号()包围,内部是键值对(Key-Value Pair)的集合。
- 键(Key)必须是字符串(双引号包围),值(Value)可以是任意JSON数据类型(包括基本类型、对象、数组)。
- 键值对之间用逗号()分隔,最后一个键值对后不能有逗号(否则会报错)。
示例:
{
"name": "李四",
"age": 30,
"isStudent": false,
"address": {
"city": "北京",
"district": "海淀区"
}
}
(2)数组(Array):有序值的列表
- 用方括号(
[])包围,内部是值的有序集合,值可以是任意JSON数据类型。 - 值之间用逗号()分隔,最后一个值后不能有逗号。
示例:
[
{"name": "王五", "age": 25},
{"name": "赵六", "age": 28},
{"name": "钱七", "age": 22}
]
语法“红线”:这些错误千万别犯
JSON的语法容错率极低,以下是新手最容易踩的坑:
- 引号错误:键必须用双引号,不能用单引号(如
'name': "张三"是错的)。 - 逗号冗余:最后一个键值对或数组元素后不能有逗号(如
{"name": "张三",}是错的)。 - 数据类型混用:布尔值不能是数字(如
"isStudent": 1是错的,必须用true/false),字符串不能是数字(如"age": "25"是数字类型,除非明确需要字符串)。 - 注释不支持:JSON原生不支持注释(如
// 这是注释),若需注释,可在JSON外层用包裹(如JavaScript中的/* { "name": "张三" } */)。
实战案例:从简单到复杂的JSON写法
案例1:用户信息(基本对象)
{
"id": 1001,
"username": "json_user",
"email": "json@example.com",
"isActive": true,
"lastLoginTime": "2023-10-01T12:00:00Z"
}
- 说明:包含数字、字符串、布尔值、时间字符串(遵循ISO 8601格式)。
案例2:电商订单(嵌套对象+数组)
{
"orderId": "ORD20231001001",
"customer": {
"name": "张三",
"phone": "13800138000",
"address": {
"province": "广东省",
"city": "深圳市",
"detail": "南山区科技园"
}
},
"items": [
{
"productId": "P001",
"productName": "无线鼠标",
"quantity": 2,
"price": 99.99
},
{
"productId": "P002",
"productName": "机械键盘",
"quantity": 1,
"price": 299.00
}
],
"totalAmount": 498.98,
"orderTime": "2023-10-01T15:30:00Z"
}
- 说明:通过嵌套对象表示客户地址,通过数组表示订单商品列表,体现JSON的复杂结构表达能力。
案例3:配置文件(数组+混合类型)
{
"appConfig": {
"appName": "MyApp",
"version": "1.0.0",
"debugMode": false,
"supportedLanguages": ["zh-CN", "en-US", "ja-JP"],
"database": {
"host": "localhost",
"port": 3306,
"tables": ["users", "products", "orders"]
},
"features": {
"enableLogin": true,
"enablePayment": false,
"maxUploadSize": 10485760
}
}
}
- 说明:常用于应用程序配置,混合了对象、数组、布尔值、数字等类型,结构清晰易维护。
如何验证JSON是否正确?
写完JSON后,必须验证其语法是否正确,以下是常用方法:
在线工具
- JSONLint(https://jsonlint.com/):粘贴JSON代码,自动检测语法错误(如逗号冗余、引号错误等)。
- JSON Validator(https://jsonvalidator.net/):支持实时验证,并格式化JSON显示。
代码验证
-
JavaScript:使用
JSON.parse()尝试解析,若报错则说明JSON不合法。const jsonString = '{"name": "张三", "age": 25}'; try { const obj = JSON.parse(jsonString); console.log("JSON合法:", obj); } catch (e) { console.error("JSON不合法:", e.message); } -
Python:使用
json.loads()解析,捕获json.JSONDecodeError异常。import json json_str = '{"name": "张三", "age": 25}' try: obj = json.loads(json_str) print("JSON合法:", obj) except json.JSONDecodeError as e: print("JSON不合法:", e)
JSON进阶:与数据类型的映射(不同语言中的表示)
JSON是独立于语言的,但在不同编程语言中,JSON数据类型会映射到对应语言的类型:
| JSON类型 | Python类型 | JavaScript类型 | Java类型 |
|---|---|---|---|
| 对象 | dict | Object | Map/JSONObject |
| 数组 | list | Array | List/Array |
| 字符串 | str | String | String |
| 数字 | int/float | Number | int/Double |
| 布尔值 | bool | Boolean | boolean |
| null | None | null | null |
示例:



还没有评论,来说两句吧...