JSON 工具怎么选:格式化、JSONPath、Schema 与 Diff 的区别
“处理 JSON”可能指五件完全不同的事:让文本更易读、从嵌套数据中取值、验证接口契约、比较两个版本,或生成代码模型。选错工具通常不会立刻报错,却会让你重复复制数据,甚至漏掉类型变化。
先用一份 API 响应说明问题
{"requestId":"r-1024","users":[{"id":9007199254740993,"name":"小趁","roles":["admin"]}],"page":{"size":20,"next":null}}这份数据是合法 JSON,但一行难读;id 超过 JavaScript 的安全整数范围;调用方还可能只关心管理员姓名,或要求 page.size 必须是正整数。不同问题对应不同工具。
五类工具的分工
| 目标 | 应该使用 | 输出 | 不负责 |
|---|---|---|---|
| 阅读、压缩、发现语法错误 | JSON 格式化 | 缩进文本或压缩文本 | 业务字段是否正确 |
| 从嵌套结构查询值 | JSONPath | 匹配路径和值 | 修改原始数据 |
| 验证接口契约 | JSON Schema | 字段级错误列表 | 判断业务流程是否合理 |
| 比较两个版本 | JSON Diff | 新增、删除、修改项 | 解释改动原因 |
| 生成类型定义 | JSON 转 TypeScript等 | 接口、类或结构体 | 替代人工代码审查 |
第一步:格式化并确认数字精度
格式化首先确认引号、逗号、括号和转义是否符合 JSON 语法。趁手的格式化器会保留超过安全整数范围的十进制原文,避免 9007199254740993 被普通 JSON.parse 舍入。格式化通过只表示文本符合 JSON 语法,不表示字段完整或类型符合接口约定。
第二步:查询值时选择 JSONPath 或 JSON Pointer
要取得所有用户名称,可用 $.users[*].name;要筛选管理员,可使用带过滤条件的 JSONPath。它适合“一次得到多个匹配结果”。如果你已经知道确定位置,例如 /users/0/name,JSON Pointer更简单。JSON Pointer 由 RFC 6901 定义,JSONPath 的标准语法见 RFC 9535。
第三步:用 Schema 验证接口契约
{
"type": "object",
"required": ["users", "page"],
"properties": {
"users": {"type": "array"},
"page": {
"type": "object",
"required": ["size"],
"properties": {"size": {"type": "integer", "minimum": 1}}
}
}
}Schema 可以发现字段缺失、字符串误传成数字、枚举越界等问题。它无法确认“用户是否真的存在”这类需要数据库或远程服务的业务规则。生成 Schema 后仍应结合真实样本和接口文档复核必填项。
第四步:比较版本时先决定数组规则
普通 Diff 按数组位置比较,适合顺序有意义的列表。接口返回顺序不稳定时,位置比较会产生大量假差异;此时可在增强 Diff 中按 id 对齐,并忽略 requestId、updatedAt 等每次变化的字段。忽略规则越多,遗漏真实变化的风险也越高,因此应明确记录规则。
第五步:生成代码后仍要审查类型
样例生成器只能根据当前样本推断类型。样本里的 null 无法告诉工具真实类型;只出现一次的字段也无法证明它必填。Java 的 Long、TypeScript 的 number、Go 的 int64对超大整数的处理不同。涉及雪花 ID 时,前端通常应优先按字符串传输。
推荐的实际工作流
- 先格式化并修正语法错误,确认大整数没有丢失。
- 用 JSONPath 提取你真正需要观察的字段,减少噪声。
- 用 JSON Schema 固化必填项、类型和范围。
- 对新旧响应运行 Diff,按业务含义选择数组顺序和忽略字段。
- 最后生成代码模型,并由开发者检查可空性、日期和大整数类型。
常见问题
JSON 格式化能检查接口字段类型吗?
只能确认 JSON 语法并改善可读性。字段契约需要 JSON Schema。
JSONPath 和 JSON Pointer 有什么区别?
Pointer 定位确定路径;JSONPath 支持通配符、递归和过滤,可返回多个结果。
比较两个接口响应应该用什么?
使用 JSON Diff;对时间戳或乱序数组,可使用增强 Diff 的忽略字段和按键对齐功能。
规范来源与边界
本站工具在浏览器本地处理粘贴内容,但浏览器扩展、输入法和设备环境仍可能接触输入。生产密钥、完整个人信息和未脱敏业务数据不应粘贴到任何不受控环境。