跳到正文

JSON Schema 生成

JSON to JSON Schema

从一份或多份样例推断 JSON Schema,把见到的各种形态并起来。

把一份样例文档描述成 JSON Schema(2020-12):类型、属性、`required`,以及为重复出现的形状生成嵌套的 `$defs`。适合契约测试、OpenAPI 组件,或任何校验器要的是 schema 而不是示例的地方。

🔒 完全在你的浏览器里运行json-schemajsoncodegenvalidation
生成语言

示例 JSON

拖入 .json 文件

在这个标签页里读取,不上传。

手上有几条就全放进来。每多一条记录,推断就更收紧一点——某条里缺了的字段,正是它被判成可选的依据。

TypeScript

怎么用

  1. 有多少条记录就粘贴多少

    每个数组的每个元素都会被读取并合并,不只是第一个。三条记录告诉它的远比一条多,因为某个字段在其中一条里缺失,正是让那个字段变成可选的依据。

  2. 给根类型起名

    嵌套对象按持有它的键命名,数组会转成单数,所以 `users` 得到 `User`。只有根需要你起名。

  3. 读输出下方的计数

    类型数、可选字段数、联合类型数,以及合并了多少条记录。联合类型计数大于零,说明某个字段在你的样本里出现过两种不同的值——把结果粘进代码库之前值得看一眼。

  4. 把 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 才开始告诉你真实的东西。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。