# JSON 转多语言实体类教程：粘贴 JSON 一键生成 Java/Python/Go 等 11 种语言实体类

> 来源：工具派（https://gjupai.com） 原文页面：https://gjupai.com/tutorial/json-to-entity-multi-lang-guide

## 工具简介

**JSON 转多语言实体类**是工具派面向开发者的一款代码生成工具：把接口返回的 JSON 粘贴到左侧输入框，选择目标语言并点击「生成实体类」，右侧就会得到对应语言的实体类代码——Java Class、Python dataclass、TypeScript interface、Go struct、C# Class、Dart、Rust、Swift、Kotlin、PHP、Ruby 共 11 种语言全覆盖。工具会自动推断字段类型、把嵌套对象和对象数组拆成独立的子类，并按各语言惯例转换命名，生成结果可一键复制，全程在浏览器本地运行，打开即用、无需安装。

## 功能亮点

- **11 种目标语言**：Java、Python、TypeScript、Go、C#、Dart、Rust、Swift、Kotlin、PHP、Ruby，输出均为各语言惯用结构——Rust 自动带 serde 派生与 rename 注解、Kotlin 生成 data class、Swift 遵循 Codable、Python 生成 @dataclass。
- **自动类型推断**：字符串、整数、小数、布尔、null 分别映射为各语言对应类型；整数与小数会区分成 int / double（Go 中为 int / float64）等不同精度。
- **嵌套结构自动拆类**：JSON 中的嵌套对象会递归生成独立子类；对象数组会以元素类型生成「列表<子类>」形式的字段，数组键名会智能去掉尾部 s 作为子类名。
- **三个生成选项**：Java 专属「Lombok」勾选后省略 getter/setter 并附 @Data 注释；「可空」让 TypeScript 字段加 `?`、Go 标签加 omitempty、Dart/Kotlin 类型加 `?`；「JSON 注解」为 Go 结构体生成 `json:"字段名"` 标签（默认开启）。
- **规范化命名转换**：Java / Dart / Kotlin / Swift 字段转为 camelCase，Rust 字段转为 snake_case 并保留原名做 serde rename，Go / C# 属性转为 PascalCase，Python 保持原始字段名。
- **一键复制 + 容错提示**：结果区右上角「复制」按钮一键带走全部代码；JSON 格式错误时给出红色提示「JSON 解析失败，请检查输入」，根节点不是对象时也会在输出中说明推断类型。

## 参数说明

| 参数 | 说明 | 默认值 / 取值范围 |
| --- | --- | --- |
| 语言下拉框 | 选择要生成的目标语言 | Java（默认）/ Python / TypeScript / Go / C# / Dart / Rust / Swift / Kotlin / PHP / Ruby |
| 根类名 | 最外层类的名称；嵌套子类的类名由字段名自动生成 | 默认 Root |
| Lombok | 仅 Java 可见：勾选后类中不再生成 getter/setter，改为标注 `// Lombok: @Data` 注释 | 默认不勾选 |
| 可空 | TypeScript 字段追加 `?`；Go 的 json 标签追加 `,omitempty`；Dart / Kotlin 类型追加 `?` | 默认不勾选 |
| JSON 注解 | Go 结构体字段生成 `json:"原字段名"` 标签 | 默认勾选 |
| 输入 JSON | 待转换的 JSON 文本，页面自带一段示例 | 默认示例 `{name, age, vip, tags}` |

## 使用步骤

1. **打开工具页面**：左侧是「输入 JSON」编辑区，右侧是「生成代码」结果区，顶部是语言、类名与选项行，页面已预置一段示例 JSON。

![JSON 转多语言实体类主界面：顶部为语言下拉框（默认 Java）、根类名输入框（默认 Root）和 Lombok/可空](article/202607/1783968752649_4774.png)

2. **粘贴或编写 JSON**：在左侧输入框粘贴接口返回的 JSON。默认示例中 `name` 为字符串、`age` 为整数、`vip` 为布尔、`tags` 为字符串数组，正好覆盖四种基础类型。

3. **选择目标语言与类名**：在左上下拉框选择语言（如 Java），在「根类名」输入框填写最外层类名（默认 Root）。

4. **按需勾选生成选项**：Java 下可勾选「Lombok」省略 getter/setter；需要可选字段时勾选「可空」；生成 Go 结构体时保持「JSON 注解」勾选以输出 json 标签。

5. **点击「生成实体类」**：右侧结果区立即生成对应语言代码。嵌套对象会拆成独立子类排在根类之前，`tags` 这样的数组字段会生成 `List<String>`（Java）之类的列表类型。

6. **复制使用**：确认结果后点击结果区右上角「复制」，粘贴到项目源码中即可。

## 使用技巧

- **对象数组的子类名会自动「单数化」**：字段 `users` 对应的子类名会去掉尾部 s 变成 User，起字段名时用复数能让生成的类名更自然。
- **空数组与 null 会退化为通用类型**：空数组推断为「任意类型列表」，null 推断为 Object / any / interface{} 等，生成后记得按实际情况手工收窄类型。
- **整数与小数分开处理**：`3` 会生成 int 类类型，`3.5` 会生成 double / float64，若接口实际返回浮点金额，示例数据里写成小数能让推断类型更准确。
- **Go 项目保持「JSON 注解」开启**：生成 `json:"user_id"` 标签后，字段名即使转为 PascalCase 也能正确反序列化；配合「可空」还能加上 omitempty，适合精简响应体。
- **根节点必须是对象**：如果 JSON 顶层是数组，工具会取第一个元素生成；顶层是字符串、数字等标量时无法生成实体类，会在输出中给出提示。

## 常见问题

**Q1：支持哪些语言？生成的是什么结构？**
共 11 种：Java Class（getter/setter 或 Lombok）、Python @dataclass、TypeScript interface、Go struct、C# Class（`{ get; set; }`）、Dart final 字段 + 构造器、Rust serde struct、Swift Codable struct、Kotlin data class、PHP Class、Ruby attr_accessor 类。

**Q2：「可空」选项具体影响哪些语言？**
TypeScript 字段名后加 `?` 表示可选；Go 的 json 标签追加 `,omitempty`；Dart 和 Kotlin 的类型后加 `?` 表示可空。其余语言该选项不影响输出。

**Q3：嵌套对象和数组会生成几个类？**
每个嵌套对象、每个对象数组都会各自生成一个独立子类，子类代码排在根类之前；子类类名由字段名做 PascalCase 转换得到（对象数组会先去尾部 s）。

**Q4：提示「JSON 解析失败」怎么办？**
说明输入不是合法 JSON，常见原因是多了尾随逗号、用了单引号或混入了注释。先用 JSON 校验工具格式化一遍再粘贴即可。

**Q5：生成的字段顺序和原 JSON 一致吗？**
一致。工具按 JSON 对象中键的出现顺序生成字段，子类按遇到的先后顺序依次排列在根类前面。

