输入 JSON 结构会按样例反推,数组元素自动取并集
生成结果 —
类型概览
生成规则
类型是怎么推出来的:遍历样例 JSON,对象取键的并集 —— 在所有同类对象里都出现的键是必填,
只出现一部分的键标记为可选;数组把所有元素的类型合并成一个(例如
嵌套类型命名:按字段名推导 —— 字段
数字类型:JSON 规范里只有一种数字(双精度浮点),没有整型概念。这里按「样例里这个字段是否全是整数」 来挑
样例不代表全集:反推出来的类型只反映你粘进来的这一份数据。字段可能为
联合类型:JSON 里同一个字段混了多种类型(
各语言差异(挑几个容易踩的):Go 的字段名必须导出(首字母大写),原键名保留在 json tag 里; Python 的
[1, "a"] → number | string),
空数组因为没有线索,一律按 any / interface{} 处理。嵌套类型命名:按字段名推导 —— 字段
users(对象数组)会生成 User(自动去复数),
字段 address 会生成 Address。重名时自动加数字后缀。数字类型:JSON 规范里只有一种数字(双精度浮点),没有整型概念。这里按「样例里这个字段是否全是整数」 来挑
int64 / int / float64 —— 如果线上数据可能出现小数,请手动改成浮点类型。样例不代表全集:反推出来的类型只反映你粘进来的这一份数据。字段可能为
null、
数组可能为空、对象可能多出别的键,这些都推不出来,生成后请人工过一遍。联合类型:JSON 里同一个字段混了多种类型(
[1, "a"])时,静态语言大多没有对应写法,
会退化成该语言的「任意值」类型:Go/C# 用 interface{}/object、Rust/Scala/C++ 用
serde_json::Value/Json/nlohmann::json、Python 用 Union[...]。各语言差异(挑几个容易踩的):Go 的字段名必须导出(首字母大写),原键名保留在 json tag 里; Python 的
dataclass 要求「有默认值的字段必须排在后面」,所以可选字段会被自动挪到末尾;
Rust 用 #[serde(rename)];Java/C# 把字段名改成驼峰/帕斯卡并用 @JsonProperty、
[JsonPropertyName] 映射回原键名;Swift 靠 CodingKeys 映射;Dart 会连
fromJson/toJson 一起生成;C 用指针表示可选与嵌套,数组额外配一个 _len 字段。