JSON格式正确的是什么样?一文带你JSON的核心规范
在数据交互的舞台上,JSON(JavaScript Object Notation)以其轻量、易读、易解析的特性,成为开发者们传递数据的“通用语言”,无论是前后端数据传输、API接口响应,还是配置文件存储,JSON的身影无处不在,但“JSON格式正确”究竟意味着什么?本文将从核心结构、数据类型、关键规则三个维度,为你拆解JSON的正确样貌,并通过实例对比帮你避坑。
JSON的核心结构:两种“顶层容器”的边界
JSON的本质是一种数据表示格式,其核心结构只有两种:对象(Object)和数组(Array),任何合法的JSON文本,要么是一个对象,要么是一个数组,它们就像“容器”,可以嵌套包含其他数据。
对象(Object):键值对的集合
对象用花括号 包裹,内部由零个或多个键值对(Key-Value Pair)组成,键值对之间用逗号 分隔。
- 键(Key):必须是字符串(必须用双引号 包裹,不能用单引号);
- 值(Value):可以是任意JSON支持的类型(字符串、数字、布尔值、null、对象、数组);
- 格式:
"键": 值,键值对之间用逗号分隔,最后一个键值对后不能有逗号。
示例(正确):
{
"name": "张三",
"age": 25,
"isStudent": false,
"address": {
"city": "北京",
"district": "海淀区"
}
}
错误示例:
- 键用单引号:
{'name': '张三'}(键必须双引号); - 键值对后多逗号:
{"name": "张三", "age": 25,}(最后一个键值对后不能有逗号); - 键非字符串:
{name: "张三"}(键必须是双引号字符串)。
数组(Array):有序值的列表
数组用方括号 [] 包裹,内部由零个或多个值组成,值之间用逗号 分隔。
- 值(Value):可以是任意JSON支持的类型(包括对象、数组等);
- 格式:
[值1, 值2, 值3],值之间用逗号分隔,最后一个值后不能有逗号。
示例(正确):
[
"苹果",
"香蕉",
{
"name": "橙子",
"price": 5.8
},
null
]
错误示例:
- 值后多逗号:
["苹果", "香蕉",](最后一个值后不能有逗号); - 用花括号代替方括号:
{"苹果", "香蕉"}(数组必须用方括号)。
JSON支持的数据类型:五种“基础类型”+两种“容器类型”
JSON的值(Value)共有7种类型,其中5种是基础类型,2种是容器类型(对象、数组,前面已介绍)。
字符串(String):必须双引号包裹
字符串由双引号 包裹,内部可以包含任意字符(包括中文、特殊符号),但需注意转义。
- 合法字符:字母、数字、中文、空格、标点符号等;
- 转义字符:如果字符串本身包含双引号、反斜杠等特殊字符,需用
\转义,如:"他说:\"你好\""、"路径:C:\\Users"。
示例:
{
"message": "Hello, 世界!",
"escape": "反斜杠:\\,双引号:\""
}
错误示例:
- 单引号包裹:
{'message': 'Hello'}(字符串必须双引号); - 未转义双引号:
{"message": "He said: "Hello""}(字符串内双引号需转义)。
数字(Number):无引号,区分整数和浮点数
数字不需要用引号包裹,分为整数(如 25)和浮点数(如 14),支持科学计数法(如 1e3 表示1000)。
- 规则:不能有前导零(除
0外),如0123是错误的;数字不能以 开头(如+25错误);Infinity和NaN不是合法JSON数字。
示例:
{
"integer": 100,
"float": 3.14159,
"scientific": 2e5
}
错误示例:
- 数字加引号:
{"age": "25"}(数字是基本类型,不需要引号,否则会被识别为字符串); - 前导零:
{"number": 0123}(正确应为123); Infinity:{"value": Infinity}(非法,需用字符串"Infinity"表示)。
布尔值(Boolean):只有 true 和 false
布尔值是 true(真)和 false(假),全小写,不能加引号(加引号会变成字符串)。
示例:
{
"isActive": true,
"isAdmin": false
}
错误示例:
- 首字母大写:
{"isActive": True}(正确应为true); - 加引号:
{"isActive": "true"}(此时是字符串,不是布尔值)。
null:表示“空值”,固定为 null
null 表示“无值”或“空”,全小写,不能加引号。
示例:
{
"extraData": null
}
错误示例:
- 首字母大写:
{"extraData": Null}(正确应为null); - 加引号:
{"extraData": "null"}(此时是字符串,不是null)。
JSON格式的“铁律”:这些规则不能破
除了结构和类型,JSON还有一些“硬性规则”,违反就会导致格式错误:
顶层只能有一个“根”
JSON文本的顶层只能是一个对象或一个数组,不能同时存在多个根元素。
正确示例(对象根):{"name": "张三"}
正确示例(数组根):["苹果", "香蕉"]
错误示例(多根):{"name": "张三"} "age": 25(顶层只能有一个元素)。
逗号的使用:分隔元素,但不能“尾随”
- 对象中,键值对之间用逗号分隔,最后一个键值对后不能有逗号;
- 数组中,值之间用逗号分隔,最后一个值后不能有逗号。
错误示例:// 对象尾随逗号 {"name": "张三", "age": 25,} // 错误
// 数组尾随逗号 ["苹果", "香蕉",] // 错误
#### 3. 引号、冒号、逗号的“配对”规则
- 对象的键必须用双引号,值如果是字符串也必须用双引号;
- 键值对之间用冒号 `:` 分隔(冒号后不能加空格?其实可以加,但规范建议冒号前后加空格提升可读性,如 `"name": "张三"`);
- 逗号 `,` 必须在元素之间,不能单独存在。
**错误示例**:
- 键无双引号:`{name: "张三"}`;
- 冒号错位:`{"name" "张三"}`(缺少冒号);
- 逗号单独存在:`{"name": "张三",, "age": 25}`(连续逗号)。
#### 4. 注释?不支持!
JSON**原生不支持注释**(如 `// 单行注释` 或 `/* 多行注释 */`),如果需要添加注释,可以通过以下方式“曲线救国”:
- 在字符串中模拟注释:`{"note": "这是注释"}`;
- 在JSON解析前,用工具(如 `strip-json-comments`)移除注释(需提前处理)。
**错误示例**:
```json
{
// 这是注释
"name": "张三" // 错误


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