JSON 转 GraphQL Schema(SDL)

从 JSON 生成 GraphQL SDL 对象类型:区分 Int 与 Float、非空标记、列表类型,并根据示例推断嵌套类型。免费,在浏览器内运行。

非空字段带 "!"。超过 32 位的整数变为 Float;混合或仅为 null 的值使用自定义 JSON 标量。

完全在浏览器中运行,您的数据不会被上传。

相关工具

查看全部

什么是 JSON 转 GraphQL?

根据 JSON 示例生成 GraphQL 模式定义语言(SDL)的 type 声明。必填值带有非空标记 !,数组变为列表类型,嵌套对象变为单独的对象类型。

如何使用 JSON 转 GraphQL

  1. 将 JSON 示例粘贴到 JSON 输入中(或点击加载示例/打开文件)。
  2. 设置根类型名称(默认为 Root)。
  3. 复制生成的 GraphQL 代码,或下载为文件。

示例

输入
{"id":1,"name":"A","tags":["x"]}
输出
type Root {
  id: Int!
  name: String!
  tags: [String!]!
}

何时使用 JSON 转 GraphQL

适合为封装现有 JSON/REST 服务的 GraphQL API 勾勒模式。它只输出对象类型;输入类型、查询、变更和解析器仍需自行编写。

JSON 转 GraphQL 的工作原理

程序会递归遍历示例,每个位置都会收集见到过的类型。对象数组会合并为一个类型:在部分元素中缺失的键变为可选,在某处为 null 的键变为可空,整数与小数混合会变为浮点类型,其他混合了多种类型的情况则回退为动态类型。嵌套对象成为各自命名的类型(键名的 PascalCase,数组键取单数:orders → Order),名称冲突时添加数字后缀。GraphQL 输出将整数映射为 Int(当数值超过 32 位时为 Float,因为 GraphQL 的 Int 是 32 位的),小数映射为 Float,字符串映射为 String,布尔值映射为 Boolean。示例中为 null 或缺失的值是可空的(没有 !)。混合类型或只有 null 的值使用自定义的 JSON 标量,需要时会在顶部声明。不是有效 GraphQL 名称的字段名会被转换为 camelCase。

常见用例

  • 为 REST API 之上的 GraphQL 网关起草对象类型
  • 用 SDL 记录 JSON 数据的结构
  • 从示例数据开始模式优先的 API 设计
  • 对照 REST 载荷与现有的 GraphQL 模式

常见问题

为什么 id 的类型是 Int 而不是 ID?

示例只显示了一个数字。如果该字段是标识符,请改为 ID!——工具无法得知其语义。

JSON 标量是什么?

用于类型多变的值的自定义标量。你的服务器必须定义它,例如使用 graphql-scalars。

为什么大整数用 Float?

GraphQL 的 Int 仅限 32 位有符号值;更大的数字会被拒绝,所以映射为 Float(或使用自定义的 BigInt 标量)。

探索更多分类