JSON 转类型
把 JSON 数据递归推断为 TypeScript / Go / Java / Kotlin 的类型定义,自动命名嵌套类型、合并数组对象字段、识别可空字段。
目标语言
JSON 输入
344 chars · 17 lines
TypeScript 接口
441 chars · 27 lines
使用说明
用途
JSON 转 TypeScript / Java / Kotlin / Swift / Go / Rust / Python / Dart 等多种语言类型定义的在线工具,根据 JSON 数据结构推断字段类型,生成对应语言的接口 / 类 / struct 定义。智能处理嵌套对象(生成多个类型)、数组类型(推断元素类型)、null 处理(可选属性)、相同结构对象合并(避免重复定义)。常用于前后端接口对齐、第三方 API 接入快速生成类型、TypeScript 严格模式 + JSON 数据互通。所有生成在浏览器本地完成。
操作步骤
- 左侧粘贴 JSON 数据(单对象 / 数组都行)
- 选目标语言:TypeScript / Java / Kotlin / Swift / Go / Rust / Python / Dart
- 右侧输出类型定义
- 类型名:根字段类型自动取 Root / RootItem / 自定义
- 嵌套对象:自动生成子类型并引用
- 数组元素类型推断:[1,2,3] → number[],[{a:1}] → A[]
- 可选属性:null 值字段标 ?: / nullable
- TS 选项:interface 还是 type alias、JSDoc 注释
常见问题
- JSON 里 null 字段怎么推断类型?
- **JSON 没有类型概念**,纯靠数据推断。**null**: 没有更多信息时标 unknown / any / Any。**字段有时有值有时 null**: 推断为 Type | null(TS)或 Optional<Type>(Java 8+)或 nullable(Kotlin)。**推荐**: 给工具多份 JSON 样本,工具合并推断更准。
- 数组里元素类型不一致怎么办?
- **全是同类型**: `[1,2,3]` → `number[]`。**混合**: `[1,"a",true]` → `(number | string | boolean)[]`(TS 联合类型)。**对象数组属性不一致**: `[{a:1},{a:1,b:2}]` 工具默认合并: `{a: number, b?: number}[]`(b 可选)。
- TypeScript interface 和 type 别名怎么选?
- **功能基本相同**。差异: 1) interface 可以 declare merge(同名 interface 自动合并),type 不能;2) type 可以定义联合类型(A | B)和原始类型别名(type Email = string);3) interface 更适合可扩展的对象类型,type 更适合纯类型组合。**实际**: 对象结构用 interface,复杂类型用 type。
- Java / Kotlin 生成的类要不要 Lombok?
- Java 默认生成完整 getter / setter / toString / equals(很长)。**勾选 "Lombok"** 后简化为 @Data 注解。**Kotlin** 默认 data class(一行解决,无需 Lombok)。**Swift** 默认 struct(结构体,无需额外注解)。
- 生成的类型字段名风格怎么处理?
- JSON 通常 camelCase(前端)或 snake_case(Python / Go 后端)。**TypeScript**: 保留原名(camelCase 是 TS 惯例)。**Java / Kotlin**: 转 camelCase。**Python**: 转 snake_case + @field 注解保留原名。**Go**: 转 PascalCase + 结构体 tag `json:"原名"`. 本工具按目标语言惯例自动转换。
应用场景
- 前后端接口对齐:后端返回的 JSON 一键生成 TS 类型
- 第三方 API 接入:API 文档示例 JSON 转目标语言类型
- TypeScript 严格模式:把 any 替换为推断出的具体类型
- 跨语言通信:定义 JSON Schema 后生成多语言类型
- 快速原型:粘 JSON 草稿快速生成代码骨架
适用场景
前后端接口、第三方 API、TS 严格化、跨语言通信、快速原型。前端、后端、移动端开发常用。多语言支持、嵌套自动拆类型、null 智能处理、命名风格转换是关键差异点。