JSON数据的书写规范详解
JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因简洁、易读、易解析的特性,被广泛应用于前后端数据交互、配置文件存储等场景,要确保JSON数据能被正确解析和传递,必须遵循其严格的书写规范,本文将从基础结构、数据类型、格式要求、常见错误及最佳实践五个维度,详细解析JSON数据的书写规范。
基础结构:键值对的集合与有序列表
JSON数据的核心结构是键值对(Key-Value Pair)和有序列表(有序值集合),两者通过特定符号区分层级和关系。
数据表示:键值对与值的组合
JSON数据以“键: 值”的形式存储数据,其中键(Key)必须是字符串,用双引号()包围;值(Value)可以是多种数据类型(详见第二节),键值对之间用逗号()分隔,整体用大括号()包围,表示一个“对象”(Object)。
示例:
{
"name": "张三",
"age": 25,
"isStudent": false
}
列表表示:有序值的集合
当数据为有序集合时,使用方括号([])包围,内部元素用逗号()分隔,称为“数组”(Array),数组中的值可以是任意JSON数据类型(包括对象或数组)。
示例:
{
"courses": ["数学", "英语", "物理"],
"scores": [
{"subject": "数学", "score": 90},
{"subject": "英语", "score": 85}
]
}
数据类型:值的规范与限制
JSON支持的值类型有限,必须严格遵循,否则会导致解析失败。
字符串(String)
- 必须用双引号()包围,不能用单引号()或反引号(
`)。 - 支持转义字符,如换行符(
\n)、引号(\")、反斜杠(\\)等,转义字符必须以反斜杠(\)开头。
正确示例:
"message": "他说:\"你好!\"", "multiline": "第一行\n第二行"
错误示例:
'name': '张三' // 单引号包围 key: value // 无引号包围
数值(Number)
- 不区分整数和浮点数,统一用
Number表示。 - 支持负数(开头)、小数点()、科学计数法(
e或E,如23e4表示12300)。 - 不能省略小数点前的0(如
.5必须写作5),不能以0开头(除非是0本身,如0123错误,应为123)。
正确示例:
"age": 25, "price": 99.9, "scientific": 6.022e23
错误示例:
"price": .99, // 省略小数点前0 "number": 0123 // 以0开头
布尔值(Boolean)
仅支持true和false(全小写,首字母不能大写)。
示例:
"isAdult": true, "isActive": false
空值(Null)
表示“空”或“无值”,仅能使用null(全小写,不能写作NULL、Null或)。
示例:
"middleName": null
复合类型:对象与数组
- 对象:由大括号()包围,包含多个键值对(如第一节示例)。
- 数组:由方括号(
[])包围,包含多个有序值(如第一节示例)。 - 对象和数组可以嵌套,但需确保层级清晰。
格式规范:缩进、换行与逗号
JSON对格式的要求虽不强制(机器解析时忽略空白字符),但良好的格式可提升可读性,便于调试和维护。
缩进与换行
- 推荐使用“缩进+换行”分层嵌套结构,通常用2个空格或1个Tab缩进(避免使用空格与Tab混用)。
- 每组键值对或数组元素独占一行,复杂结构(如嵌套对象/数组)需额外缩进。
推荐格式:
{
"user": {
"id": 1001,
"contacts": [
{"type": "phone", "number": "13800138000"},
{"type": "email", "address": "example@email.com"}
]
}
}
逗号的使用
- 最后一个键值对或数组元素后不能加逗号(这是最常见的格式错误之一)。
- 键值对之间、数组元素之间用逗号分隔,逗号后需紧跟下一个值(或换行+缩进)。
正确示例:
{
"key1": "value1",
"key2": "value2"
}
错误示例:
{
"key1": "value1", // 最后一个键值对后有多余逗号
"key2": "value2",
}
常见错误与避坑指南
引号混用
错误:键或值用单引号包围(如'name': '张三')。
规范:键必须用双引号,值如果是字符串也必须用双引号。
注释支持缺失
JSON标准不支持注释(或),部分解析器可能扩展支持,但为保证兼容性,需避免在JSON中写注释,若需注释,可通过“键+特殊值”模拟(如"_comment": "用户信息")。
末尾逗号
如前所述,最后一个键值对或数组元素后不能加逗号,否则会导致解析错误(尤其在JavaScript中,JSON.parse()会抛出异常)。
非法数据类型
JSON不支持undefined、Date对象、函数、正则表达式等类型,若需传递这些数据,需转换为字符串(如JSON.stringify()会将Date转为ISO格式字符串)。
键重复
对象中的键必须唯一,重复键会导致解析时后值覆盖前值(不同语言/解析器处理方式可能不同,但不符合JSON规范)。
最佳实践:可读性与兼容性兼顾
键名语义化
键名使用有意义的英文单词(或拼音,但推荐英文),避免缩写(如userName优于usrnm),采用驼峰命名或下划线命名(保持统一)。
避免深层嵌套
嵌套层级过深(如超过3层)会增加解析难度,可通过“扁平化设计”优化(如将嵌套对象拆分为多个关联对象)。
使用JSON校验工具
编写完成后,可通过在线JSON校验工具(如JSONLint)或IDE插件(如VS Code的“JSON”插件)检查格式是否正确,避免低级错误。
序列化与反序列化
在编程中,使用官方提供的序列化(如JavaScript的JSON.stringify())和反序列化(如JSON.parse())方法,确保数据转换符合规范。
JSON数据的书写规范核心可概括为:键值定界(双引号+冒号)、结构清晰(大括号对象、方括号数组)、类型受限(仅支持6种基本类型)、格式严谨(禁用末尾逗号和注释),遵循这些规范,不仅能确保数据能被不同系统/语言正确解析,也能提升数据的一致性和可维护性,是数据交换场景中“通用语言”的基础。



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