JSON 转 Go 结构体
JSON to Go Structs
从 JSON 样例生成带 json tag 的 Go 结构体,嵌套和重复出现的类型都能处理。
从一份样例文档生成带 `json:` tag 的 Go 结构体,让响应体变成 `encoding/json` 能 unmarshal 进去的东西。字段名导出并转成驼峰,原始键保留在 tag 里——手写时出错的正是这一处。
示例 JSON
拖入 .json 文件
在这个标签页里读取,不上传。
手上有几条就全放进来。每多一条记录,推断就更收紧一点——某条里缺了的字段,正是它被判成可选的依据。
TypeScript
怎么用
有多少条记录就粘贴多少
每个数组的每个元素都会被读取并合并,不只是第一个。三条记录告诉它的远比一条多,因为某个字段在其中一条里缺失,正是让那个字段变成可选的依据。
给根类型起名
嵌套对象按持有它的键命名,数组会转成单数,所以 `users` 得到 `User`。只有根需要你起名。
读输出下方的计数
类型数、可选字段数、联合类型数,以及合并了多少条记录。联合类型计数大于零,说明某个字段在你的样本里出现过两种不同的值——把结果粘进代码库之前值得看一眼。
把结构体粘进某个包
在部分记录里缺失的字段,tag 里会带 `,omitempty`,这样 marshal 一个来回不会凭空造出它们。不输出 package 子句——它要去哪儿你自己知道。
常见问题
为什么所有数字都是 `float64`?
只在样本里出现过小数时才会这样。如果文档里每个数字都是整数,字段就输出为整数类型。没有办法区分作为 id 的 JSON `1` 和作为舍入后价格的 JSON `1`,所以样本就是全部的证据。
在部分记录里是 null 的字段呢?
它会变成指针类型,这是 Go 区分「缺失或 null」和「零值」的方式。也就是说解引用前需要判 nil——麻烦,但另一种做法(一个悄悄读成 0 或 "" 的普通值)更糟。
键不是合法的 Go 标识符怎么办?
字段名会被整理——去掉分隔符,每一段首字母大写——原始键留在 `json:` tag 里,真正做匹配的是它。`user-id` 这样的键会变成 `UserID` 之类,旁边带着 `json:"user-id"`。
会生成 `time.Time` 字段吗?
不会。JSON 里的时间戳是字符串,把它变成 `time.Time` 会改变 unmarshal 能接受的输入。如果你要这样,手工改字段类型——`encoding/json` 自己就能把 RFC 3339 解析成 `time.Time`。
可以从这些接进来
JSON 转 TypeScript 类型
JSON to TypeScript
从一份 JSON 样例推断 TypeScript 接口或类型,合并可选字段和联合类型。
JSON 转 Rust 结构体
JSON to Rust Structs
从 JSON 样例生成带 serde 标注的 Rust 结构体,可空或缺失的字段用 Option,键名用 snake_case 加 rename 处理。
JSON 格式化与校验
JSON Formatter & Validator
把 JSON 美化成缩进形式或压成一行,校验语法并直接指出出错的行和列。
YAML 格式化与校验
YAML Formatter & Validator
统一 YAML 缩进并校验语法,把会让解析器崩掉的制表符和锚点错误标出来。
接下来
这些工具吃得下当前工具的产出,结果可以直接送过去。
JSON 格式化与校验
JSON Formatter & Validator
把 JSON 美化成缩进形式或压成一行,校验语法并直接指出出错的行和列。
JSON 转 Rust 结构体
JSON to Rust Structs
从 JSON 样例生成带 serde 标注的 Rust 结构体,可空或缺失的字段用 Option,键名用 snake_case 加 rename 处理。
JSON 转 TypeScript 类型
JSON to TypeScript
从一份 JSON 样例推断 TypeScript 接口或类型,合并可选字段和联合类型。
Base64 编码解码
Base64 Encoder & Decoder
对文本和文件做 Base64 与 Base64URL 编解码,UTF-8 处理正确。
curl 转代码
curl to Code
把一条 curl 命令转成 fetch、axios、Python requests、Go、PHP 或 PowerShell 代码。
文本哈希计算
Text Hash
算出字符串的 MD5、SHA-1、SHA-256、SHA-384、SHA-512 和 CRC-32,输出可选大写或 Base64。