首页 › 编程开发 › JSON生成代码
🔧

JSON生成代码

粘一段接口返回的 JSON,生成 TypeScript、Java、C#、Go、Python、Dart 六种数据类和 JSON Schema,自动推断可空与类型冲突、拆分嵌套对象

JSON 样本
解析、推断与代码生成都在浏览器本地完成,页面不发任何网络请求。
样本只提供结构线索:字段值不会出现在生成的代码里,字段名与可空性由样本推断。
生成选项
TypeScript
Java
C#
Go
Python
Dart
生成代码
粘贴 JSON 后自动生成代码

工具介绍

接口文档经常只有一句「返回如下 JSON」,而你要落地的是一整套类型定义。手写这件事不难,但极费时间且容易漏:字段有几十个、数组里的元素是个对象、有的键在某条样本里是 null、还有 order-id、class、中文键这类不能直接当标识符的名字。这个工具的做法是把推断写成看得见的规则,并在生成结果里把每一条都标出来,而不是给你一段猜出来的代码。

能生成什么

  • TypeScript:interface 或 type 别名两种写法,可选字段带 ?,未知类型可写成 unknown 或 any
  • Java:私有字段加读写方法的实体类,数字可选 int/double/BigDecimal,非法或保留字键名改写后用 @JsonProperty 记住原名
  • C#:record 或 class,属性名走 PascalCase,原始键名保留在 JsonPropertyName 里
  • Go:struct 加 json 标签,任意类型可选 interface{}(兼容老版本)或 any(Go 1.18+)
  • Python:标准库 dataclasses 加类型注解,或 pydantic v2 模型并用 Field(alias=...) 保留原键名
  • Dart:带 fromJson/toJson 的类,可空字段用 ?,嵌套对象拆成独立类
  • JSON Schema:draft-07 结构,含 type、required、items、$ref 定义,可直接喂给校验库或另一套代码生成器

推断的具体规则

  • 类型取自样本:字符串、布尔、整数、小数、null、数组、对象分别映射到各语言的自然写法,整数与小数同时出现在一个位置时统一按小数生成并提示
  • 可空性:样本里出现过 null 的字段标成可选或可空,不同语言用各自惯用表达(?、包装类型、Optional、指针)
  • 数组元素合并:同一个数组里多个对象的字段取并集,共同出现过的进 required,只部分出现的记为可选;空数组无法推断元素类型,按任意类型处理并明确提示
  • 嵌套对象拆类:对象数组和深层对象各自生成独立类型,命名按「根类型名 + 字段名」拼出,避免一个巨型匿名结构
  • 类型冲突不硬猜:同一位置既像字符串又像对象时,取更宽的任意类型并给出「类型冲突:x 与 y」的提示,告诉你哪种字段样本给少了
  • 键名合法化:中文键、带 - 与空格的键、各语言保留字都会改成合法标识符,原名保留在注解或标签里;也可以切到「保留原始键名」让生成器加引号硬写
  • 重复键名:同一个对象里出现两次同名键时取最后一次的值,并在提示里指出位置,因为这类 JSON 各解析库行为并不一致

怎么让生成的类型更准

  • 样本尽量覆盖真实情况:把可能为 null 的字段、只有部分渠道才有的字段、空数组和非空数组各来一条,多贴几条再合并比贴一条大全更可靠
  • 数组元素差异极大(联合类型)时,工具会合并成并集,此时人工拆成两个类型往往更清晰
  • 金额一类精度敏感字段,把数字类型声明改成精确小数,不要用双精度浮点
  • 大文件先裁:超过 2 MB 的样本类型推断仍然能跑,但生成结果会非常庞大,建议只保留代表性片段

常见问题

  • 生成的类型准确吗?准确程度取决于样本,工具做的是「按你给的样例取并集」,无法知道你没贴出来的字段。所有推断出的可疑之处都以提示形式列出,不会静默猜一个类型
  • 为什么字段被重命名了?目标语言的标识符规则不允许原键名,例如 Go 的结构体字段必须大写开头、Java 不能用 class 作字段名。改名映射都写进注解或标签,序列化结果仍是原键名
  • 能把已有类型改回去吗?键名策略切到「保留原始键名」即可按原名生成(必要时加引号),代价是部分语言里需要额外写法
  • 支持多份 JSON 一起推断吗?把多条响应拼成数组贴进来,数组元素的字段会被合并推断,这也是覆盖可空字段最省事的做法
  • 数据会上传吗?不会。解析、推断、生成、格式化全部在浏览器里完成,页面不发送任何请求,样本只留在当前标签页
  • 生成的 Schema 有什么用?可以直接给校验库做接口入参检查,也能作为其他代码生成器的输入,或者放进接口文档里当数据结构说明
  • 下载和复制哪个方便?复制直接进剪贴板方便粘进已有文件;下载按目标语言给出正确扩展名,适合一次生成多个模型文件
  • 提示里的「空对象」是什么意思?样本里那个对象没有任何键,生成器只能按字典类型产出。补一条有内容的样本才能得到具体字段

样本本身格式混乱先用 JSON 格式化 排好;要转成配置数组见 JSON 转 PHP;导出表格用 JSON 转 CSV 或 JSON 转 Excel;生成的 JS/TS 代码要排版参考 JS 代码格式化;排查字段名规则可用 正则表达式测试;调试登录态接口时的令牌解读见 JWT 解析。