很多人第一次接触 JSON Schema,是在接口已经出问题之后:前端收到一个本来应该是数字的字符串,测试发现某个字段偶尔缺失,或者后端改了嵌套结构,却没有人能说清这是不是破坏性变更。JSON Schema 在线工具能把一份真实样例转换成可阅读、可校验的结构约定,再继续生成 Mock 数据、代码类型和可视化结果。它不是把 JSON 换一种格式那么简单,而是帮团队把“我们约定接口长这样”说得更具体。
JSON Schema 到底解决什么问题
JSON 样例回答的是“这一次返回了什么”,JSON Schema 更接近“这类数据允许长什么样”。样例里有一个 price 字段,只能说明当前数据里出现了它;Schema 则可以进一步表达它是数字、是否必填、是否允许为空、字符串应该符合什么格式,以及对象内部可以有哪些属性。两者都重要,但用途不同:样例适合阅读和演示,Schema 适合校验和沟通。
这也是为什么我不建议把 Schema 只当成代码生成的中间文件。它更像接口协作里的共同语言。前端可以据此生成类型或 Mock,后端可以据此检查响应,测试可以据此准备边界数据,产品或技术文档也能更容易看出字段层级。工具把这些动作放在同一个页面里,适合先用一份脱敏样例把结构搭出来,再回到业务里补齐真正的约束。
- 生成:从 JSON 样例快速得到 Schema 草稿,减少手写括号和层级的成本。
- 校验:检查一份数据是否符合字段类型、必填项和结构约束。
- Mock:没有后端接口时,先根据 Schema 生成可供前端联调的示例数据。
- 交付:把结构转换为 TypeScript 等代码,或用可视化方式帮助别人快速理解。
一份样例应该怎样变成可用 Schema
直接把生产响应粘贴进去当然很快,但不一定稳。真实响应经常混有 Token、手机号、订单号、内部 URL,甚至把日志前缀一起复制了进来。更好的习惯是先整理输入,再生成草稿,最后用实际场景验证。这个流程看起来多了几步,却能避免把脏数据、偶然字段和敏感信息一起写进团队材料。
- 1先准备一份脱敏且合法的 JSON从接口响应中移除访问令牌、Cookie、真实个人信息和内部地址。若输入还不是合法 JSON,可先用 JSON 在线校验工具定位语法错误,再用 JSON 格式化工具整理结构。
- 2观察数据里稳定和偶然的字段把字段分成“每次都应该有”“只有部分场景出现”和“调试时才出现”三类。生成工具能从样例推断结构,但它不知道 traceId 是必填业务字段还是一次请求的临时信息。
- 3用 JSON 转 Schema 得到第一版打开 JSON Schema 工具的 JSON 转 Schema 面板,先接受自动生成的层级和基础类型,再逐项检查数组、对象、空值和必填字段是否符合预期。
- 4补上业务约束和字段说明把仅靠样例看不出的规则补进去,例如金额不能为负、状态只能取某几个值、邮箱要符合格式、数组至少包含一项。描述字段含义时,尽量写“它影响什么”,不要只重复字段名。
- 5用正常、边界和错误数据各校验一次一份只通过正常样例的 Schema 还不够。准备一份完整数据、一份缺少字段的数据和一份类型错误的数据,确认校验结果能把问题指出来,而不是因为约束过松全部放行。
最容易写错的五类约束
Schema 真正有价值的地方,不在于字段树看起来多完整,而在于它能否把团队已经达成的判断写出来。下面几类约束最值得人工复核,因为自动生成通常只能根据当前样例猜测,猜得越“自信”,越容易让人忘记它其实只是猜测。
1. 必填和可选不是一回事
某个字段在样例里出现,并不代表所有请求都必须带它。比如订单的 coupon 可能只在使用优惠券时返回,用户没有优惠券时字段可能缺失,也可能返回 null。你需要先确认接口约定,再决定它进入 required、允许 null,还是两者都不满足。不要因为“当前样例里有”就把所有字段都锁死。
2. null、空字符串和缺失各有含义
在数据处理中,这三种状态经常被混成一团:字段不存在,字段存在但值为 null,字段存在且值是空字符串。对展示型字段来说,它们可能都意味着“没有内容”;对筛选、计费和权限字段来说,含义可能完全不同。Schema 不能替你做业务决策,但可以把决定后的差异写清楚,让校验及时暴露不一致。
3. 数字和数字字符串不能凭感觉处理
19.9 和 "19.9" 对人眼很像,对程序却是不同类型。数量、金额、排序权重和时间戳是否应该是 number,要结合接口消费者和序列化规则确认。尤其不要为了让一份混乱数据通过,就把所有字段都放宽成 string;短期少一个错误,长期却会让类型问题一路传到业务逻辑里。
4. 数组是重复对象,还是固定选项集合
items 可能是任意长度的订单列表,也可能是必须包含 2 个元素的坐标。对数组而言,元素类型、最小长度、最大长度和元素内部结构都可能有意义。工具能帮助你看出数组层级,但最小数量和业务顺序通常要由人补上。若要限制数组元素只能取固定选项,还应明确使用枚举,而不是仅凭一个样例推断。
5. 格式约束不是“长得像”就算
日期、邮箱、手机号、URL、UUID 等字符串,常常需要 format 或更明确的模式约束。但格式也不能滥用:一个内部编号未必是 UUID,一个只用于展示的日期也未必需要完整的时间格式。先确认消费者真正依赖的格式,再写约束,避免把前端暂时的展示习惯误写成接口规则。
免费工具、代码生成和真实交付怎么配合
JSON Schema 页面本身更像一个小型工作台,而不是只有一个“转换”按钮。JSON 转 Schema 适合从样例起步;Schema 转 Mock 适合后端还没准备好时让前端先动起来;校验面板适合检查响应是否遵守约定;代码生成适合把结构带回项目;可视化面板则适合在评审或交接时快速浏览层级。
| 能力 | 免费版 | Pro |
|---|---|---|
| 接口刚有一份响应样例 | 只复制样例给别人 | 先转成 Schema 草稿,再补业务约束 |
| 前端等待后端接口 | 手写几份临时 JSON | 由 Schema 生成 Mock,保持结构一致 |
| 上线前检查响应 | 凭肉眼看字段 | 用正常、缺失、类型错误样例分别校验 |
| 把结构带进代码库 | 手写类型,容易漏嵌套层级 | 生成类型草稿后由开发者复核 |
| 评审复杂嵌套数据 | 在长 JSON 中上下滚动 | 用可视化结构先定位讨论范围 |
这里的“更稳做法”不代表每次都要把所有面板走一遍。接口很小的时候,生成 Schema 再校验一次就够;数据结构复杂、参与人多、版本要长期维护时,Mock、代码生成和可视化才更有价值。工具的意义是减少重复劳动,不是把简单事情强行流程化。
一次会员接口改版怎样落地
level 从字符串改成对象,并新增权益列表。前端担心类型变化,测试需要边界数据,产品只关心不同等级展示哪些权益。- 1.选取旧版和新版各一份脱敏样例,先在 JSON Schema 工具中分别生成结构草稿。
- 2.人工确认
level的类型变化、权益列表是否可为空,以及没有权益时是空数组还是字段缺失。 - 3.从新版 Schema 生成 Mock 数据,让前端先覆盖基础会员、过期会员和权益为空的状态。
- 4.把正常响应、缺少
level和错误类型的数据分别送入校验,记录哪些情况应该被拒绝。 - 5.再用 JSON Diff 工具对比新旧样例,把真正的结构变化写进变更说明。
为什么生成的 Schema 不能直接当最终契约
自动生成的最大优点是快,最大的风险也是快。它能根据现有数据整理出对象、数组和基础类型,却无法从一份样例中知道未来所有合法状态。比如样例中只出现了 paid,不代表状态枚举只有这一项;样例里没有 cancelledAt,也不代表取消订单永远不需要这个字段。
所以,生成之后一定要有一轮“反向提问”:哪些字段是业务必需的?哪些只在某个状态下出现?空数组和缺失字段是否等价?金额精度怎么处理?时间使用 UTC 还是本地时区?数组顺序是否有意义?如果这些问题还没有答案,Schema 应该标记为草稿,而不是悄悄进入生产校验。
Schema 版本怎么维护,才不会越写越乱
当 Schema 开始参与联调和发布,就需要像代码一样考虑版本。新增一个可选字段通常比删除字段安全;把 number 改成 string、把对象改成数组、把可选字段变成必填,都可能让旧消费者出问题。判断兼容性时,不要只看 JSON 文件“还能不能打开”,要看现有客户端是否仍能读取、生成的类型是否仍能编译、校验规则是否会突然拒绝旧数据。
- 文件名或目录写清接口名称、版本和更新时间,不要用一堆
final-new-v3。 - 每次修改记录字段变更、兼容影响和需要同步的消费者。
- 把正常样例、最小样例和失败样例一起保存,避免只测“最漂亮”的输入。
- 生成的 TypeScript 类型、Mock 和文档都当作派生物,源头仍应是经过确认的 Schema。
- 发布前使用 JSON Diff或代码评审检查结构变化,尤其关注 required、type、enum、数组和 null。
交给团队前的检查清单
- 输入样例已经脱敏,并且通过 JSON 语法校验。
- 每个字段的类型、必填状态、null 处理和业务含义都有人确认。
- 数字没有被误写成数字字符串,日期和 URL 等格式约束有真实依据。
- 数组的元素结构、是否允许为空、长度范围和顺序含义已经说明。
- 至少准备了一份正常数据、一份缺失字段数据和一份类型错误数据。
- Mock 数据只用于开发和测试,不冒充真实业务结果。
- 生成的代码类型和 Schema 都经过项目负责人复核,没有直接盲目提交。
- 版本变更已说明兼容性,相关前端、后端和测试用例都有后续动作。
和这些工具一起用
如果你手里的 JSON 还不合法,先用 JSON 在线校验工具找出最前面的语法错误;需要读懂或整理输入时,用 JSON 格式化工具处理缩进和结构。接口升级前后,可以用 JSON Diff 在线比对工具确认字段变化。现在就要开始的话,打开 JSON Schema 在线生成与校验工具,粘贴一份不含敏感信息的样例,从草稿开始,不必等到文档“完美”才动手。