⭐ 觉得好用?收藏备用,下次直接打开
输入 JSON
输入:空
输出 Schema
输出:等待输入

JSON 转 Schema 从样本 JSON 推断对应的 JSON Schema。工作原理是遍历 JSON 每个节点,把值的类型、嵌套结构、数组元素的共同骨架翻译成 Schema 约束。底层用 to-json-schema,纯浏览器运行。

推断能覆盖的

  • 基础类型(string / number / integer / boolean / null
  • 对象结构(propertiesrequired
  • 数组元素(按 uniform / first / all / tuple 策略合并)
  • 嵌套(任意深度)
  • format(可选识别 date-time / email / uri 等)

推断不能覆盖的(需手动补):

  • 字段的文字描述(descriptiontitle
  • 枚举值(enum)、常量(const)——单样本看不出这是”取值集合”
  • 数值边界(minimum / maximum)、字符串长度限制
  • 正则约束(pattern
  • 组合(anyOf / oneOf / allOf)——需要多份对比样本才能推出来

推荐工作流:把本工具当作 Schema 的”骨架生成器”,拿到草稿后在编辑器里手动加 description、收紧 required、补 enumpattern。然后用 JSON Schema 校验器 验证一组真实数据,迭代调整。

📍使用场景

  • 从 API 响应反推契约粘一份真实的接口响应 JSON,秒出对应 Schema 作为契约草稿,不用手写 `type` / `required`。
  • 配置文件文档化给一份项目 `config.json` 生成 Schema,配合 IDE 的 schemaStore 做自动补全和实时校验。
  • Schema 首版起草写 Schema 最怕冷启动,先喂一份样本 JSON 拿到骨架,再手动精修 `description` / `enum` / `format`。

常见问题

uniform / first / all / tuple 四种数组模式怎么选?

uniform(默认)假定数组里所有元素类型一致,用它们的合并结构生成 `items`;first 只看第一个元素,速度最快但不准;all 把所有元素的字段并集起来(适合字段可选不齐的列表);tuple 把数组当成元组,每个位置独立推断类型(适合 `[姓名, 年龄, 地址]` 这种位置敏感的结构)。不确定就选 uniform。

勾选 "所有字段 required" 打开 vs 关闭有什么区别?

打开时生成的 Schema 会把样本里出现过的全部字段写进 `required`。这在"样本代表完整契约"时合适;但一旦现实里某些字段是可选的,校验就会误报。建议流程:先打开勾选保留完整约束,然后手动从 `required` 数组里删掉可选字段。

会把数字精度、字符串长度写进 Schema 吗?

不会。本工具只推断 `type` / `required` / 数组结构 / 对象属性 / format(如果开启)。它不会自动生成 `minLength` / `maxLength` / `minimum` / `pattern` 这些值约束——因为单个样本推不出合理的边界。想要严格 Schema,把输出作为草稿再手动加这些字段。

勾选 "检测 format" 能识别哪些类型?

识别范围由底层 `to-json-schema` 的 `strings.detectFormat` 决定:`date-time`(ISO 8601)、`date`、`time`、`email`、`uri`、`hostname`、`ipv4`、`ipv6`。识别依据是字符串值是否匹配正则——只要样本里某个字段恰好是 ISO 日期,就会自动加上 `format: date-time`。如果这个识别是误判,关掉该选项即可。

Draft 7 和 2020-12 生成的 Schema 有啥差别?

对简单样本几乎没差别,主要影响 `$schema` 字段的 URL 和未来手动编辑时可用的关键字。2020-12 支持 `prefixItems`(元组)、`$dynamicRef`、独立 `$defs` 等;Draft 7 则用 `items: [...]` 表达元组、`definitions` 存共享片段。选对 Draft 可让下游工具(校验器、代码生成器)按正确语法解析。

内联 examples 有什么用?

勾上后会在 Schema 根部加 `examples: [原始样本]`,这样 Schema 既是契约也带一份"长这样"的示例。适合写接口文档、发布到 schemaStore;不适合作为线上 API 契约(暴露真实数据)。