JSON Schema 生成
JSON to JSON Schema
从一份或多份样例推断 JSON Schema,把见到的各种形态并起来。
把一份样例文档描述成 JSON Schema(2020-12):类型、属性、`required`,以及为重复出现的形状生成嵌套的 `$defs`。适合契约测试、OpenAPI 组件,或任何校验器要的是 schema 而不是示例的地方。
示例 JSON
拖入 .json 文件
在这个标签页里读取,不上传。
手上有几条就全放进来。每多一条记录,推断就更收紧一点——某条里缺了的字段,正是它被判成可选的依据。
TypeScript
怎么用
有多少条记录就粘贴多少
每个数组的每个元素都会被读取并合并,不只是第一个。三条记录告诉它的远比一条多,因为某个字段在其中一条里缺失,正是让那个字段变成可选的依据。
给根类型起名
嵌套对象按持有它的键命名,数组会转成单数,所以 `users` 得到 `User`。只有根需要你起名。
读输出下方的计数
类型数、可选字段数、联合类型数,以及合并了多少条记录。联合类型计数大于零,说明某个字段在你的样本里出现过两种不同的值——把结果粘进代码库之前值得看一眼。
把 schema 拿去校验器
输出带着 `$schema` 关键字,可以直接放进本站的 JSON Schema 校验工具,或任何 2020-12 实现。
常见问题
这是哪个 draft?
Draft 2020-12,在 `$schema` 关键字里声明。可复用的形状放在 `$defs` 里并用 `$ref` 引用,这是那个 draft 的写法;Draft-07 的工具要的是 `definitions`,解析不了这些引用。
为什么除了类型之外什么约束都没有?
不输出 `format`、`minLength`、`pattern` 或 `enum`。这些每一项都会是从几条记录里推出来的,而一个拒绝合法生产数据的 schema 比一个只是宽松的更糟。加上你真正能说明理由的约束。
设了 `additionalProperties` 吗?
留着开放,也就是多余的键能通过校验。关掉它会让接口以后新增的每个字段都变成校验失败,而样本没法告诉你这个形状是不是本来就该封闭。
它怎么决定什么进 `required`?
一个属性在合并进那个形状的每条记录里都出现过,它就是必填的。粘一条记录,所有东西都是必填;粘五条,schema 才开始告诉你真实的东西。
可以从这些接进来
JSON 转 TypeScript 类型
JSON to TypeScript
从一份 JSON 样例推断 TypeScript 接口或类型,合并可选字段和联合类型。
JSON 转 Zod 校验模式
JSON to Zod Schema
从 JSON 样例构建 Zod schema,自动推断 nullable、optional 和枚举。
JSON Schema 校验
JSON Schema Validator
用 JSON Schema 校验文档,每一处失败都带上它在实例里的路径。
JSON 格式化与校验
JSON Formatter & Validator
把 JSON 美化成缩进形式或压成一行,校验语法并直接指出出错的行和列。
接下来
这些工具吃得下当前工具的产出,结果可以直接送过去。
JSON Schema 校验
JSON Schema Validator
用 JSON Schema 校验文档,每一处失败都带上它在实例里的路径。
JSON 转 TypeScript 类型
JSON to TypeScript
从一份 JSON 样例推断 TypeScript 接口或类型,合并可选字段和联合类型。
JSON 转 Zod 校验模式
JSON to Zod Schema
从 JSON 样例构建 Zod schema,自动推断 nullable、optional 和枚举。
OpenAPI 检查
OpenAPI Linter
检查 OpenAPI 文档里缺失的响应、没人用的 schema、指不到东西的引用,以及别的会弄坏代码生成器的毛病。
JSON ⇄ CSV 互转
JSON ⇄ CSV
把嵌套 JSON 按点路径列名拍平成列,或者从表格重新拼回对象。
JSON 对比
JSON Diff
按结构比较两份 JSON,忽略键的顺序,报出新增、删除和改动的路径。