⭐ 觉得好用?收藏备用,下次直接打开
输入 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
  • 枚举与常量enumconst,单样本看不出这是”取值集合”
  • 数值边界minimum / maximum、字符串长度限制
  • 正则约束pattern
  • 组合 schemaanyOf / 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(默认)假定数组里所有元素类型一致,用它们的合并结构生成 itemsfirst 只看第一个元素,速度最快但不准;all 把所有元素的字段并集起来(适合字段可选不齐的列表);tuple 把数组当成元组,每个位置独立推断类型(适合 [姓名, 年龄, 地址] 这种位置敏感的结构)。不确定就选 uniform。

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

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

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

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

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

识别范围由底层 to-json-schemastrings.detectFormat 决定:date-time(ISO 8601)、datetimeemailurihostnameipv4ipv6。识别依据是字符串值是否匹配正则——只要样本里某个字段恰好是 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 契约(暴露真实数据)。