跳到正文
DevTools / 代码生成器

代码生成器

照着接口响应示例手写模型类既枯燥又容易出错——某个字段在别的响应里是 null,却被写成了非可选类型,这个错误要在很久以后才会以运行时异常的形式暴露。本生成器读取 JSON 示例并输出 TypeScript、Go、Java、Python、Rust、C#、Swift、Kotlin、JSON Schema 和 SQL 的类型定义,会合并数组中的各个元素,使可选性反映数据真实情况,而不是某一个示例的偶然样子。

完全在浏览器本地运行——不会上传任何内容。

JSON 示例

可空性与可选性由数组内所有元素合并推断,样本越丰富结果越准确。

生成结果

工作原理

第一遍从示例构建类型描述。每个 JSON 值对应一种原始类型——字符串、数字、布尔、null、对象或数组——对象与数组递归生成嵌套定义。数组是最有意思的情形:不假定首个元素具有代表性,而是合并所有元素,因此当某个元素缺少某字段时,输出会是可选字段而不是直接缺失。任一样本中为 null 的字段会成为可空字段,而空数组会产生一个占位类型,需要你自行补齐。

输出目标决定命名方式。TypeScript 接口对部分元素缺失的字段加可选标记,对可空字段使用与 null 的联合类型。Go 结构体使用导出字段名,并从原始键派生 JSON tag;真正可选的值使用指针类型,以便把零值与“不存在”区分开。Python 数据类使用 Optional 并默认 None,Rust 结构体使用 Option 配合 serde 属性。无论哪种语言,目标都是让生成的类型精确描述这份示例,从而让后续的编译错误意味着接口变了,而不是生成器猜错了。

边界情况会被显式处理而不是静默略过。在目标语言中不是合法标识符的键——含连字符、空格或以数字开头——会被加引号或映射为合法名称,同时在序列化元数据中保留原始名字,因为破坏这层映射会让代码编译通过却在运行时失败。目标语言的保留字同理。仅大小写不同的键会被标出,因为它们在有些语言中冲突,在另一些语言中不冲突。

JSON Schema 是唯一描述而非实现的目标。它会输出 draft-07 架构,包含类型、required 列表以及放在 $defs 下的嵌套定义,适合用来校验未来的载荷是否符合今天从样本推断出的契约。请记住,单个样本只能证明什么存在过,永远无法证明什么是必需的:样本中出现的字段在接口里可能是可选的,只有文档或第二份样本才能告诉你答案。

常见应用场景

  • 在编写客户端之前,先为接口响应生成 TypeScript 接口。
  • 从 Webhook 载荷示例生成带正确 JSON tag 的 Go 结构体。
  • 为配置文件生成 Python 数据类,让编辑器能够自动补全。
  • 从示例载荷生成 JSON Schema,在测试套件中校验后续消息。
  • 为承接 JSON 数据流的临时表生成匹配的 SQL 建表语句。
  • 对比两份样本中字段的可选性,看哪些是真正始终存在的。

最后更新: 2026-10-14

常见问题解答

它如何判断哪些字段是可选的?

通过合并数组中的每个对象,而不是只看第一个。只出现在部分元素中的字段在输出中会成为可选或可空,出现在所有元素中的字段则是必填。单独的、没有数组上下文的对象无法提供任何关于可选性的信息,因此所有字段都会被当作存在。想要准确结果,请提供包含多条真实响应(包括边界情况)的数组。

能从 JSON Schema 反向生成代码吗?

本工具这个方向不支持。它的定位是读取示例数据并推断类型,这更贴近“先拿到响应、还没有规范”的常见需求。如果你已经把 JSON Schema 当作唯一事实来源,请使用专门的 schema 生成代码工具,因为它们能把 minimum、pattern、enum 等约束带进生成的类型里,而仅凭单份样本的推断做不到这一点。

样本中始终为 null 的字段会怎样?

它们会成为可空且无法确定类型的字段,生成器会明确报告,而不是猜一个类型。这是正确的行为:在所有样本里都为 null 的字段可能是字符串、对象或数字,随便选一个会生成能编译、却在遇到第一个真实值时立刻失败的代码。请再取一份该字段有值的响应重新生成,或查阅接口文档。

生成的代码可以直接上生产吗?

它能编译,也精确匹配你的样本,是一个正确的起点,并且刻意保持不预设风格。它不会替你添加校验、自定义序列化、文档注释或团队的命名规范,因为这些只有你能决定。真正枯燥且容易出错的部分——类型与字段映射——已经替你完成,剩下的只是常规的代码评审。

相关工具