JSON 转 TypeScript — 另支持 Zod、Go、Python、Java、C#、Rust
粘贴 JSON 示例,即可得到 TypeScript 接口、Zod 模式、JSON Schema,或 Go、Python、Java、C#、Kotlin、Swift 和 Rust 的类型定义。
类型仅根据示例推断。示例中为 null 的字段会变成 null 或 any;粘贴更完整的示例(或包含多条记录的数组)可得到更精确的类型。
完全在你的浏览器中运行。你的 JSON 绝不会上传,因此可以放心处理真实的 API 响应。 浏览全部免费工具.
发现问题,或者觉得哪里可以更好?每条消息我们都会阅读,并尽快修复。
这款免费的 JSON 转 TypeScript 工具读取一个 JSON 示例(例如 API 响应或配置文件),写出对应的 TypeScript 接口,每个嵌套对象都有一个命名类型。同一份输入还能生成 Zod 模式、JSON Schema、Go 结构体、Python dataclass 或 Pydantic 模型,以及 Java、C#、Kotlin、Swift 和 Rust 的类,再也不用手动敲字段名。
类型推断使用 quicktype——quicktype.io 和“Paste JSON as Code”编辑器扩展背后的开源引擎,在你的浏览器中运行。它会合并数组中的每个对象,因此只在部分记录中出现的字段会变为可选。它只能根据看到的内容进行推断:示例中为 null 的字段会被推断为 null 类型,空数组会被推断为任意类型的数组。粘贴带真实值的示例,或多条记录,才能得到最准确的类型。
使用方法
- 粘贴一个 JSON 对象或对象数组。初始已载入一条示例用户记录。
- 选择输出:TypeScript 接口、类型别名、Zod、JSON Schema、Go、Python、Java、C#、Kotlin、Swift 或 Rust。
- 设置根类型名称(例如 User 或 OrderResponse)。嵌套类型按其键名命名。
- 对于 PATCH 请求体等部分负载,勾选“所有属性设为可选”。取消勾选“仅类型”,可在语言支持的情况下获得序列化辅助代码。
- 复制代码,或下载为带正确扩展名的文件。
常见问题
如何把 JSON 转换为 TypeScript 接口?
选中 TypeScript(接口),把 JSON 粘贴到输入框中。每个对象都会变成一个导出的接口:字符串变为 string,数字变为 number,布尔值变为 boolean,数组变为 T[],嵌套对象则得到以键名命名的独立接口,例如 address → Address。把结果复制到 .ts 文件中,在解析响应的地方导入即可。
该用接口还是类型别名?
对于对象结构,两者几乎可以互换。接口可以被扩展,也可以通过重复声明来合并,许多代码风格指南都推荐用它定义公开的对象类型。类型别名还能表达联合类型和映射类型。如果你的代码库偏好那种风格,TypeScript(类型别名)选项会生成 `export type User = { ... }`。
如何识别可选字段?
根据示例判断。如果你的 JSON 是对象数组,且某个键在部分对象中缺失,该属性就会被标记为可选(name?: string)。在每条记录中都存在但都为 null 的键会被推断为 null;在部分记录中是字符串、在其他记录中是 null 的键会变为 null | string。要让所有属性都可选,请使用对应的选项。
为什么要用 Zod 模式而不是 TypeScript 接口?
接口只在编译时存在,无法检查 API 是否真的返回了你预期的内容。Zod 模式会在运行时验证数据(如果字段缺失或类型错误,UserSchema.parse(data) 会抛出异常),并通过 z.infer 提供 TypeScript 类型,一份定义同时满足两种需求。生成的 Zod 代码会同时导出模式和推断出的类型。
能识别日期和 UUID 吗?
只有开启“识别字符串中的日期、UUID 和数字”后才会识别。该选项默认关闭,因为 JSON 没有日期类型:JSON.parse 会把 "2026-03-14T09:26:53Z" 返回为字符串,所以除非你同时使用生成的转换代码,否则把它类型化为 Date 是错误的。开启识别后,Go 会得到 time.Time,C# 得到 DateTimeOffset 和 Guid,Python 得到 datetime 和 UUID。
我的 JSON 会被上传吗?
不会。quicktype 库只需下载一次(约 1 MB),并在你的浏览器标签页中运行。你的 JSON 绝不会被发送到任何地方,因此可以放心粘贴含有个人数据的真实 API 响应。
JSON 值在各语言中的映射
• 字符串:TypeScript、Go 中为 string,Swift 和 Kotlin 中为 String,Python 中为 str,Java 和 Rust 中为 String,C# 中为 string。
• 整数:TypeScript 中为 number,Go 中为 int64,Python 中为 int,Java 中为 long,Kotlin 中为 Long,C# 中为 long,Swift 中为 Int,Rust 中为 i64。带小数点的数字变为 float64、float 或 double。
• 布尔值:boolean、bool、Boolean、Bool,按各语言的写法。
• 数组:TypeScript 中为 T[],Go 中为 []T,Python 中为 List[T] 或 list[T],Java、Kotlin 和 C# 中为 List<T>,Swift 中为 [T],Rust 中为 Vec<T>。
• 嵌套对象:单独命名的类型或类。带有大量动态键的对象(如以 ID 为键的映射)会被识别出来,并类型化为 map 或 Record,而不是生成数百个字段。
• null:TypeScript 中为 null,Go 中为 interface{},Python 中为 None,C# 中为 object。在示例中给该字段一个真实值,才能得到有用的类型。
如何从示例得到准确的类型
推断的质量取决于示例。有三个习惯影响很大。第一,以数组形式粘贴多条记录,而不是单个对象,这样可选字段和混合类型才会显现。第二,如果你知道字段的类型,就把 null 替换为真实的值,因为在每条记录中都为 null 的字段不提供任何信息。第三,把根类型重命名为负载的实际含义(InvoiceResponse,而不是 Root);嵌套类型按其键名命名,根类型有意义时,它们在代码库中可读性会好得多。
如果 API 由你掌控,长远来看更好的办法是根据其模式(OpenAPI 或 JSON Schema)而不是示例生成类型。这里的 JSON Schema 输出可以作为编写该模式的一个不错起点。
相关免费工具
- JSON 格式化 — 格式化、压缩和校验 JSON,解析错误精确到行和列。在浏览器中运行,无需上传。
- curl 转代码 — 粘贴 curl 命令(包括 Chrome 的“Copy as cURL”),即可得到 Python、JavaScript、Node、Go、PHP、Ruby、Java、C#、wget 或 HTTPie 版本的相同请求。
- YAML 验证器 — 验证 YAML,精确给出每个错误的行号和列号,并揪出解析器会默默接受的错误:yes/no 布尔值、制表符、重复键。
- JWT 解码器 — 解码 JWT 的头部和载荷,用通俗语言显示过期时间,验证 HS、RS、PS 和 ES 签名,或签发新令牌。任何数据都不会离开浏览器。
- SQL 格式化 — 把杂乱的 SQL 格式化为可读、缩进一致的查询,支持 PostgreSQL、MySQL、T-SQL、BigQuery 等。在浏览器中运行。