JSON 转 TypeScript / Go

贴一段 JSON,直接得到能用的 interface 或 struct,省去对着接口返回手敲字段的功夫。

输入 JSON
生成的类型定义

      
字段合并规则 输入是数组时,会把所有元素的字段取并集。某个字段只出现在一部分元素里,TypeScript 输出会标成可选(?),Go 输出会加 ,omitempty。类型不一致的字段生成联合类型,例如 string | number。

怎么用

选输出语言(TypeScript 或 Go)、选命名风格、填根类型名,然后贴 JSON,输出会自动刷新。

根类型名默认 Root,建议改成接口的语义名,例如 User、OrderDetail。嵌套对象按字段名推导子类型名:{"user":{"name":"x"}} 会生成一个 User 子接口。数组里的对象合并成一个类型,用字段名单数形式派生名字(orders → Order)。

常见坑

常见问题

数组里多个对象的字段不一样,生成的类型以谁为准?
取并集。例如第一个元素有 a、第二个有 a 和 b,结果里 b 会被标成可选。这样线上返回缺字段时类型不会突然报错,也提醒你代码里要做空值判断。
生成的 Go struct 字段名和 JSON 键对不上怎么办?
字段名按命名风格转换,但 json:"user_name" 标签里始终是原始键名,序列化和反序列化完全不受影响。选「保持原样」时字段名与键名一致,只是不符合 Go 导出规则(首字母大写、去掉非法字符)的地方仍会被自动修正。
JSON 里的 null 会生成什么类型?
默认生成 null(Go 里是 any),因为只有 null 的样例确实推不出真实类型。勾选「null 视为可选」后会按未知类型处理并标记成可选字段,适合「这个字段可能没有」的接口。
空数组的字段会生成什么类型?
生成 any[],Go 里是 []any,因为没有元素可供推断。想要准确类型,就把样例里的数组换成有真实元素的内容,或者生成后手工替换掉。
键名里带短横线或中文,能生成合法代码吗?
能。TypeScript 里 {"user-name":1} 生成 "user-name": number;,带引号的属性名是合法语法。Go 里中文和短横线不能做字段名,工具会转成合法标识符,并在 json 标签里保留原键名。

相关工具

JSON 格式化压缩、美化、校验,报错时指出具体行列 JSON ↔ YAML双向转换,支持常用 YAML 子集 JSON ↔ CSV数组对象与表格互转,正确处理逗号引号换行