数据

JSON 转类型生成器

粘贴一段 JSON 样本,就能得到你所用语言的类型定义,从 TypeScript 接口、Go 结构体,到 Rust、Swift、Kotlin、Python、C# 等二十多种语言。工具会读取数据的结构,推断每个字段的类型,处理嵌套对象、数组和可选字段,输出可以直接放进代码库的干净声明。输入和输出两侧都用真正的代码编辑器,较大的数据也能保持可读,生成的代码带语法高亮。整个过程都在浏览器本地运行,机密的接口响应不会离开你的设备。

  • 把一段 JSON 样本转成二十多种语言可直接使用的类型
  • 根据数据结构推断嵌套对象、数组、可选字段与联合类型
  • 选择目标语言和根类型名称,再一键复制结果
  • 两侧都是带语法高亮的代码编辑器,能从容处理大段输入输出
  • 完全在浏览器本地运行,私有接口响应绝不会上传
工具/JSON 转类型生成器
8%
正在加载类型引擎
8%
代码生成引擎只需加载一次,之后即可瞬时转换。
快捷操作

功能简介

照着接口响应手写类型既慢又容易出错。这个工具直接读取 JSON 帮你生成声明,让类型层始终忠实于它所描述的数据。

  1. 01

    多种目标语言

    用一段 JSON 样本即可生成 TypeScript、Go、Rust、Swift、Kotlin、Java、C#、Python、Dart、Ruby、PHP 等多种语言的类型。

  2. 02

    结构推断

    嵌套对象会变成嵌套类型,数组会推断出元素类型,时有时无的字段会被标记为可选。

  3. 03

    合理的类型识别

    数字、布尔、字符串、null 和混合值都会映射到最接近的类型;当一个字段出现多种形态时,会生成联合类型。

  4. 04

    两侧都是真编辑器

    输入和输出都用带语法高亮、折叠和顺滑滚动的代码编辑器,再大的响应也能保持可读。

  5. 05

    干净的纯类型输出

    可以只保留类型声明,也可以连引擎能生成的辅助代码一起输出,按项目需要来选。

  6. 06

    本地且私密

    引擎只加载一次后便在浏览器本地运行,来自内部或未发布接口的 JSON 不会离开你的设备。

如何使用

几秒钟内,把一段原始接口响应变成编辑器能识别的类型声明。

  1. 01

    把一段有代表性的 JSON 样本粘进输入编辑器,或载入示例看看效果。

  2. 02

    选择目标语言,比如 TypeScript、Go 或 Rust。

  3. 03

    设置根类型名,让顶层类型在代码里读起来自然。

  4. 04

    在输出编辑器里查看生成的类型;如果某个字段应当可选,就调整 JSON。

  5. 05

    复制结果,粘贴进你的项目。

功能说明

类型生成器只有在输出正确、可直接粘贴时才有用,因此工具专注于跨语言的忠实推断和干净的声明。

  • 用一段 JSON 样本支持二十多种目标语言
  • 自动推断嵌套对象类型、数组元素类型和可选字段
  • 当一个字段在样本中出现多种类型时,会识别为联合类型
  • 可命名根类型,让顶层声明贴合你的代码
  • 提供仅类型模式,输出不含多余辅助代码的干净声明
  • 同时高亮 JSON 输入和所选语言的生成结果
  • 在可滚动、可折叠的代码编辑器里处理大段数据,而不是溢出页面
  • 清晰提示无效 JSON,便于在生成前先修正输入
  • 首次加载生成引擎时显示进度,之后转换即时完成
  • 完全在浏览器本地运行,机密响应绝不会上传

适合哪些场景

现实工作大多从一段 JSON 响应而非现成 schema 开始。从响应生成类型,能让代码与数据保持一致,省去大量小心翼翼的誊写。

  1. 为接口响应建类型

    把一段响应样本变成接口或结构体,让对该端点的调用都能被编译器检查。

  2. 跨语言客户端

    用同一段 JSON 为移动端和后端生成对应模型,让 Swift、Kotlin 和 Go 保持一致。

  3. 快速熟悉代码库

    粘贴一段陌生的数据,先看清它的结构、字段名和嵌套层级,再动手写代码。

  4. 配置与测试夹具类型

    为配置文件或测试夹具生成类型,让它们的结构变化以类型错误的形式暴露出来。

  5. 数据模型原型

    手写一个 JSON 形状,生成模型类的初版,作为后续开发的起点。

  6. 为无类型代码补类型

    从项目已经在处理的响应生成声明,给 JavaScript 或 Python 项目补上一层类型。

延伸阅读

如果你要的不是类型,而是同一份数据的另一种形态, JSON 转换器 可以把 JSON 转成 YAML、CSV 等格式;而 JSON 格式化 能在生成之前先整理并校验 JSON。

支持的语言及其生成结果

一段 JSON 样本会映射成各目标语言里地道的类型。选你项目在用的语言,输出会遵循该语言在命名、可选性和序列化上的惯例。

  1. TypeScript

    生成带可选属性和联合类型的 interface 与 type,是 Web 和 Node 项目里为 fetch、接口响应标注类型的首选。

  2. TypeScript 配 Zod

    生成在运行时校验数据的 Zod schema,并由每个 schema 推断出静态类型,让解析与类型保持一致。

  3. Go

    生成带 json 标签和对应字段类型的 struct,可直接用 encoding/json 进行序列化与反序列化。

  4. Rust

    生成带 serde derive 属性的 struct,配合 serde_json 即可在 JSON 与类型之间互转。

  5. Python

    生成带类型注解的类,能被类型检查器和编辑器识别,是 dataclass 或模型对象的干净起点。

  6. Java

    生成带类型字段和访问器的类,可顺畅对接 Jackson、Gson 等 JSON 绑定库。

  7. Kotlin

    生成 data class,可选字段用可空类型表示,适合 Android 和服务端的 kotlinx.serialization 或 Moshi。

  8. Swift

    生成 Codable struct,在 iOS 和 macOS 应用里用 JSONDecoder、JSONEncoder 完成 JSON 编解码。

  9. C#

    生成带类型属性和特性的类,可在 .NET 项目里配合 System.Text.Json 或 Json.NET 使用。

  10. C++ 与 Objective-C

    生成描述数据结构的 C++ struct 和 Objective-C 类,用于原生与跨平台代码。

  11. Dart

    为 Flutter 和 Dart 生成带类型字段的类,作为移动端 JSON 序列化的起点。

  12. Ruby、PHP 与 Scala

    生成与 JSON 结构对应的 Ruby、PHP 类以及 Scala case class,适用于后端与脚本场景。

  13. Elm、Haskell 与 Crystal

    为函数式与系统级语言生成 Elm、Haskell 记录以及 Crystal 类型,字段类型均从样本推断。

  14. Flow 与 JSON Schema

    为 JavaScript 项目生成 Flow 类型注解,并生成描述结构的 JSON Schema 文档,用于校验与文档化。

使用建议

推断的好坏取决于样本,几个习惯能让生成的类型更准确、更易维护。

  • 用一份每个可选字段都出现的完整样本,免得引擎把真实字段误判为缺失。
  • 如果列表里的对象可能不同,多放几条,方便识别可选字段和联合类型。
  • 给根类型起一个清晰的名字,对应它代表的端点或实体。
  • 留意被标为联合或宽松类型的字段,它们往往指向值得整理的不一致数据。
  • 把输出当作起点,把生成的嵌套类型重命名为有意义的名称。
  • 接口变化时重新生成,而不是手改类型任由其与数据脱节。
  • 共享的模型文件优先用仅类型输出,需要辅助代码时单独放置。
  • 如果 JSON 来自日志或复制的文本,先校验一遍,多余的逗号或注释会导致解析失败。

边界与注意事项

工具是从示例推断类型的,因此有几条边界需要留意。

  • 它从你提供的样本推断结构,样本里没出现的字段不会出现在结果中。
  • 它读的是 JSON,而非 JSON Schema 或 OpenAPI,因此不强制格式、取值范围或必填规则。
  • 嵌套类型的名称是自动生成的,通常需要改成贴合你业务的命名。
  • 数字按语言惯例标注类型,未必能像你的接口那样区分整数和浮点数。
  • JSON 里的日期是字符串,日期处理取决于具体语言,可能需要再调整。
  • 过大的样本会生成很大的类型文件,最好裁剪成你实际会用到的部分。

常见问题

关于从 JSON 生成类型、以及在真实项目里使用结果的常见问题。

它能生成哪些语言?

二十多种,包括 TypeScript、Go、Rust、Swift、Kotlin、Java、C#、C++、Dart、Python、Ruby、PHP、Scala、Objective-C、Elm、Haskell、JavaScript、Flow 和 JSON Schema。

JSON 会被上传到什么地方吗?

不会。生成引擎在你第一次打开工具时加载到浏览器,之后在本地运行,你的 JSON 不会发送到任何服务器。

为什么首次使用会加载一会儿?

代码生成引擎是一个较大的库,所以会先带进度条加载一次。之后转换都是即时的,不会再次加载。

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

当某个字段在样本的部分条目中缺失时,就会被当作可选。请提供完整样本,避免你依赖的字段被误判为可选。

仅类型这个选项有什么用?

它让输出只保留类型声明。关闭后,对于支持的语言,引擎还会一并生成解析、序列化等辅助代码。

它能处理对象不一致的数组吗?

可以。当数组元素不同时,引擎会推断出一个合并类型或联合类型,让结果仍能描述样本里见到的每一项。

为什么有些字段类型很宽松?

宽松或联合类型通常意味着样本里该字段出现了多种形态,往往指向值得在源头清理的不一致数据。

它会校验 JSON 吗?

它会解析 JSON,无效时给出错误提示,但不强制必填字段、取值范围或字符串格式之类的 schema 规则。

更多相关工具

生成类型只是处理 JSON 的其中一步。当你需要把同一份数据换成别的格式,或先整理一遍,其余数据工具可以接着用。