JSON 转 TypeScript / Go / Rust 结构体生成器
粘贴 JSON,选择目标语言,得到地道的类型定义。支持 TypeScript、Go、Rust、Kotlin、Java、C# 和 Python TypedDict。基于 quicktype,在浏览器中运行。
- 将一段有代表性的 JSON 样本粘贴到左侧文本区。
- 从「目标语言」下拉框中选择目标语言。
- 点击「生成」。首次点击会加载引擎(4G 上约 2–3 秒);之后的生成是即时的。
- 复制结果,或以正确的扩展名下载。
它能做什么?
通过从一个或多个 JSON 样本中推断 schema,在你的目标语言中生成地道的类型。字段类型会被推断 — 字符串保持字符串、数字变为该语言的数值类型、布尔变为 bool、数组变为切片/列表/数组、嵌套对象变为嵌套类型。在多个样本之间有时为 null 或缺失的字段会在输出中标为可空。底层使用 quicktype-core,与 quicktype.io 同一引擎。
示例
JSON 输入:
{
"name": "Ada",
"age": 36,
"active": true,
"tags": ["math", "logic"]
} TypeScript 输出(目标 = TypeScript,类型名 = User):
export interface User {
name: string;
age: number;
active: boolean;
tags: string[];
} 常见陷阱及处理方法
从 JSON 推断类型有本质局限 — JSON 没有足够的信息来完全约束一个类型系统。下列模式覆盖了推断结果可能不符合预期的情况。
- 只用一个样本时无法区分必选与可选。 单个 JSON 对象无法告诉生成器哪些字段是可选的。请提供多个样本(粘贴一个由典型对象组成的 JSON 数组),这样有时会缺失的字段会被标为可选。
- 空数组。 `{"items": []}` 会得到 `any` 数组 — 生成器没有可推断的元素。请至少提供一个有内容的示例,或在生成后手工修正类型。
- 数组元素类型不一致。 JSON 数组 `[1, "two"]` 会变成联合类型 — 在某些目标语言(尤其 Go)中可能不太好用。如果实际数据中数组应当同质,请把样本调成同质。
- 日期字符串。 JSON 没有 Date 类型。ISO 8601 日期字符串会被推断为 `string`。在 TypeScript 输出中,quicktype 有时能识别为 Date — 想要更强类型,请手工调整。
- 丢失精度的数字 ID。 大于 2^53 的 JSON 数字(大型 64 位 ID)在 JavaScript 解析时会丢失精度。生成的 TypeScript 类型仍是 `number`。需要 64 位精度时,请在 JSON 中改用 `string` 或在生成后手工迁移到 `bigint`。
- 下划线 vs 驼峰命名。 生成器会保留 JSON 的字段命名。如果 JSON 是 snake_case 而目标语言期望 camelCase,输出会保留 snake_case 字段并在适用时附加 serde / json 注解。可在后处理或使用 quicktype CLI 选项时覆盖。
常见问题
为什么第一次生成很慢?
quicktype 引擎包压缩后约 465 KB。它会在第一次点击「生成」时加载,4G 网络下需要 2–3 秒。之后整个页面会话内模块都已缓存,浏览器还会跨访问缓存,因此除非清缓存,后续的「首次点击」也是即时的。
可以用多个 JSON 样本一起生成吗?
把样本包在 JSON 数组中粘贴。生成器会推断所有样本中字段的并集,并把至少在一个样本中缺失的字段标为可选。这是确保生成类型能容忍真实数据变化的最佳方式。
后端代码该选哪个语言?
与你项目已有的语言保持一致。Go 输出使用 `encoding/json` 的标准结构体标签,Rust 使用 serde 派生,Kotlin 使用 kotlinx.serialization 注解,Java 生成 Jackson 兼容 POJO。选择取决于项目而非偏好。
字段注释会被保留吗?
JSON 没有注释语法,所以输入中没有可继承的注释。quicktype 在某些语言的输出中会附加自动生成的文档注释 — 这是引擎生成的描述,不是用户内容。
我的 JSON 会被上传吗?
不会。一切都在你的浏览器里运行 — 输入由本页的 quicktype-core JavaScript 模块本地处理。quicktype-core 也从同源(本站静态资源主机)加载;没有任何第三方服务器看到你的数据。
可以用多大的 JSON 样本?
约 5 MB 之内生成器都不会明显变慢。本工具是为代表性样本设计的,而非完整数据集 — 通常几个对象就足以推断出干净的 schema。