Formatter 询问文本能否解析以及怎样缩进;Validator 可能检查语法,也可能检查解析值是否符合 Schema。
两者有重叠:Formatter 必须解析,所以能发现语法错误;但漂亮输出不能证明必填字段、数据类型、格式、范围和业务规则正确。
五种不同契约
格式化改变展示,语法校验检查文法,Schema 校验检查结构与约束,Lint 增加质量规则,Repair 转换无效输入。
一个界面可以提供多种模式,但“有效 JSON”不能悄悄等于“符合我们的 API”。
| 工具 | 问题 | 是否改变输入 |
|---|---|---|
| Formatter | 有效数据怎样展示? | 空白 |
| 语法 Validator | 文法合法吗? | 否 |
| Schema Validator | 符合契约吗? | 否 |
| Linter | 符合质量规则吗? | 通常不改 |
| Repair | 能转换无效输入吗? | 是 |
语法有效不等于契约有效
{"age":"eighteen"} 是有效 JSON,但不符合要求非负整数的 Schema;空对象也可能不符合要求 id 和 email 的 API。
Schema 校验在解析后,根据 type、required、properties、items、enum、pattern、minimum 等关键字检查。
Formatter 的语法反馈边界
JSON.parse Formatter 会报告缺逗号、错误字符串和尾部字符,因为无效输入无法缩进。
支持 JSON5 的 Formatter 可能接受注释和尾逗号,必须标明文法,避免用户误以为源文本能被严格 API 接收。
Repair 是转换
修复可能删除注释、为 key 加引号、转换单引号、闭合结构或删除尾逗号,模糊数据可能改变含义。
可信工具保留原文、展示输出并要求复核;修复成功不等于原文通过校验。
推荐流程
先解析;失败时明确修复并复核;再格式化、Schema 校验,最后执行业务规则。
语法、Schema 和领域错误应分组,因为责任人与修复方法不同。
- 解析原文。
- 复核修复结果。
- 格式化结果。
- 使用 JSON Schema。
- 最后执行业务规则。
如何选择 ToolGarden 工具
缩进、压缩、树形查看和语法反馈用 Formatter;已有契约用 Schema Validator;注释、尾逗号、单引号或损坏文本用 Repair。
三者都在浏览器 JavaScript 中运行,无需把 Payload 发给验证后端。
总结
格式化改善表示,语法校验证明文法,Schema 校验检查契约。分开阶段才能避免“格式化成功”变成错误保证。