JSON 知识详解
本页面从基础概念到实战规范,全面介绍 JSON 的定义、语法、类型、解析流程、接口设计、数据治理、性能优化与安全要点。无论你是前端、后端、测试还是数据处理人员,都可以在这里系统理解 JSON 的核心知识与常见问题。
什么是 JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它以“文本”形式描述结构化数据,具备可读性好、跨语言兼容强、解析成本低等特点。JSON 在 Web 接口通信、配置文件、日志埋点、消息队列、数据导入导出等场景被广泛使用。
JSON 的核心目标是“让数据结构以统一、可读、可解析的方式表达出来”。它本质上是一套语法规范,并不依赖某一种编程语言。几乎所有主流语言都内置了 JSON 解析和序列化能力。
JSON 示例与字段讲解
{
"id": 1001,
"name": "Alice",
"active": true,
"skills": ["JSON", "API"],
"profile": {
"city": "Shanghai",
"age": 28
},
"remark": null
} - `id` 是数值类型,常用于主键、编号、顺序值。
- `name` 是字符串类型,必须使用双引号包裹。
- `active` 是布尔类型,只能是 `true` 或 `false`。
- `skills` 是数组类型,适合表达列表、标签、明细项。
- `profile` 是对象类型,可继续嵌套子字段描述结构化信息。
- `remark` 是空值 `null`,用于表达“字段存在但当前无值”。
JSON 语法规则(必须掌握)
基础规则
- 对象使用花括号:`{}`,由键值对组成。
- 数组使用方括号:`[]`,由多个值组成。
- 键名必须是双引号字符串,例如 `"name"`。
- 字符串值必须使用双引号,不能使用单引号。
- 键值对之间使用逗号分隔,不能在末尾多写逗号。
常见限制
- JSON 不支持注释,`//` 或 `/* */` 都会导致解析失败。
- JSON 不支持 `undefined`、`NaN`、`Infinity` 等值。
- JSON 不支持函数、日期对象、正则对象等运行时类型。
- 布尔值只能是 `true` / `false`,且必须小写。
- 空值只能是 `null`,不能写成 `NULL` 或空字符串代替。
JSON 六大数据类型
Object(对象)
由键值对组成,用于表达结构化实体,例如用户信息、订单信息。
Array(数组)
有序集合,用于表达列表数据,例如商品列表、日志列表。
String(字符串)
文本类型,必须双引号包裹,适合姓名、状态描述、编码字段。
Number(数值)
整数或浮点数。涉及大整数时需注意精度与语言解析差异。
Boolean(布尔)
`true` 或 `false`,适合开关状态、是否启用等逻辑字段。
Null(空值)
用于表达“明确为空”,区别于缺失字段和空字符串。
JSON 解析与序列化
解析(Parse)是把 JSON 字符串转换成程序可操作的数据结构;序列化(Stringify)是把程序对象转换成 JSON 字符串。解析与序列化几乎存在于所有接口请求、响应、缓存和日志链路中。
解析阶段重点
- 先校验语法,再进入业务处理。
- 对关键字段做类型判断,避免隐式转换。
- 做好异常捕获,防止单条坏数据影响整体流程。
序列化阶段重点
- 保持字段顺序和命名一致,便于调试和比对。
- 明确空值策略,减少消费者二次判断负担。
- 在对外接口中保持稳定格式,降低版本兼容风险。
接口设计中的 JSON 规范
字段命名统一:建议在同一系统内统一使用一种命名风格(如 snake_case 或 camelCase),避免混用导致前后端映射复杂。
类型保持稳定:同一字段在不同接口或不同时间返回时,类型应保持一致,避免一会儿是字符串一会儿是数字。
空值约定清晰:提前约定“缺失字段”“null”“空字符串”“空数组”的语义,减少业务歧义。
层级不要过深:过深的嵌套增加解析复杂度和错误率,必要时考虑结构扁平化。
统一响应结构:可约定基础结构,例如 `code`、`message`、`data`,便于前端和网关统一处理。
版本演进可控:新增字段优先采用向后兼容方式,删除字段前应预留迁移周期。
JSON 常见错误与排查方法
语法错误
典型表现为缺少逗号、引号、括号不匹配、包含注释等。建议先做在线校验,再做格式化定位。
编码错误
常见为中文乱码、Unicode 转义异常。可借助转义/反转义工具和乱码修复工具排查。
类型错误
例如数字被当成字符串、布尔被当成文本。建议在解析后做字段类型断言和校验。
结构错误
例如字段缺失、层级变化、数组对象混用。应结合接口文档和样例做结构一致性检查。
JSON 性能优化建议
- 减少无用字段,降低传输体积与解析开销。
- 避免超深嵌套结构,提升可读性与处理效率。
- 大数据建议分页、分片、分批处理,不要一次性全量加载。
- 日志场景可采用 JSON Lines(逐行 JSON)便于流式处理。
- 缓存场景注意序列化成本与压缩策略,权衡 CPU 与网络开销。
- 前端处理大 JSON 时优先异步和分阶段渲染,避免主线程阻塞。
JSON 安全与治理建议
在处理 JSON 时,安全并不只来自“语法正确”,还包括“输入可信、输出可控、边界清晰”。
建议对外部 JSON 输入进行严格校验:字段白名单、长度限制、类型断言、内容过滤。不要直接信任用户提交的数据结构。
在日志系统中避免记录敏感字段原文,例如手机号、身份证、令牌、密码相关数据,必要时做脱敏处理。
接口返回应遵循最小必要原则,只返回当前业务需要字段,减少敏感信息泄露与冗余传输。
建立 JSON Schema 或字段文档规范,对核心接口做自动化校验和变更审查,提升团队协作质量。
JSON 学习路径(从入门到实战)
阶段一:语法与类型
掌握对象、数组、字符串、数值、布尔、null 的写法和限制,熟悉常见语法错误。
阶段二:工具与流程
学习格式化、校验、压缩、提取、转换、去重、拆分合并等工具流程。
阶段三:规范与治理
建立字段规范、版本策略、异常处理和安全机制,形成可复用的团队标准。
JSON 代码示例(正确与错误对比)
下面通过“可直接阅读”的示例,展示 JSON 常见写法和错误写法。建议在实际开发中先做格式化和语法校验,再进入业务逻辑处理。
正确的 JSON 示例
{
"user_id": 1001,
"name": "Alice",
"is_vip": true,
"tags": ["dev", "json"],
"profile": {
"city": "Shanghai",
"age": 28
},
"last_login_at": null
} 错误的 JSON 示例
{
user_id: 1001, // 键名未加双引号,且 JSON 不支持注释
'name': 'Alice', // 不能使用单引号
"is_vip": True, // 布尔值必须是 true / false 小写
"tags": ["dev", "json",], // 末尾多余逗号
} 排查建议:先检查引号、逗号、括号,再检查是否包含注释、非法值和大小写错误。
推荐工具入口
边学边练效果更好,建议配合以下工具完成实操。