跳到正文
马克工具箱

JSON 转 JSON Schema

粘贴一段 JSON 示例,生成描述它的 JSON Schema:类型、嵌套对象、数组元素以及哪些键是必填的。可以作为数据校验、表单或接口文档的起点。

在浏览器本地运行,输入的内容和文件都不会上传

使用步骤

  1. 粘贴 JSON 示例,或点「加载示例」。
  2. 设置根 Schema 的标题。
  3. 复制或下载 Schema,再按需补充 format、pattern、取值范围等约束。

参数说明

根类型名称
用作 Schema 的 title。

使用示例

{"id": 1, "email": null} 会生成 "id": {"type": "integer"}、"email": {"type": "null"},并且两个键都在 required 中。

示例

两条用户数据,只有第一条有 email,manager 有时为 null:

[
  { "id": 1, "name": "Ada", "email": "ada@example.com", "tags": ["admin"], "manager": null },
  { "id": 2, "name": "Grace", "tags": [], "manager": { "id": 1 } }
]

根类型名填 User,生成的 Schema:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "User",
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": { "type": "integer" },
      "name": { "type": "string" },
      "email": { "type": "string" },
      "tags": { "type": "array", "items": { "type": "string" } },
      "manager": {
        "anyOf": [
          { "type": "null" },
          { "type": "object", "properties": { "id": { "type": "integer" } }, "required": ["id"] }
        ]
      }
    },
    "required": ["id", "name", "tags", "manager"]
  }
}

第二条没有 email,所以 email 不在 required 里;manager 在样例里既有 null 又有对象,所以两种都允许。样例数据越全,生成的 Schema 越准,最好多贴几条记录。

常见用途

**校验接口参数:**把 Schema 交给 Ajv(JavaScript)或 jsonschema(Python)这类校验库,不符合的请求直接拒绝。

**写接口文档:**复制 properties 到 OpenAPI 的 components.schemas,作为文档的起点。

**编辑器提示:**VS Code、JetBrains 系列编辑器可以按 JSON Schema 给配置文件补全字段、标出错误。

常见问题

哪些键会被标为必填?

在所有示例对象中都出现的键。数组里的对象键不一致时,只在部分元素中出现的键不会列入 required。

能用在 OpenAPI 里吗?

OpenAPI 3.1 使用 JSON Schema 2020-12,生成的 Schema 可以直接放在 components/schemas 下。OpenAPI 3.0 需要把 ["string", "null"] 这样的类型数组改成 nullable true。

能识别邮箱、日期时间等格式吗?

不能,它只推断类型。format、pattern、minimum 等关键字需要按需手动添加。

JSON 数据会上传吗?

不会。类型在浏览器中生成,包含真实数据的接口返回也不会离开你的设备。

隐私说明

本工具完全在浏览器中运行,文件和文本都在你的设备上处理,不会上传到我们的服务器。

相关工具