JSON2Code — 全部在本地浏览器内生成,数据不会上传

输入 JSON 结构会按样例反推,数组元素自动取并集

生成结果 —

类型概览

生成规则

类型是怎么推出来的:遍历样例 JSON,对象取键的并集 —— 在所有同类对象里都出现的键是必填, 只出现一部分的键标记为可选;数组把所有元素的类型合并成一个(例如 [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 字段。