工作原理
第一遍从示例构建类型描述。每个 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