JSON をエンティティクラスに
JSON を貼り付けて型を自動推定 · Java / TypeScript / Python / Go / C# / PHP コードを生成
JSON 输入
对象或对象数组生成选项
生成结果
类型是怎么推断的
JSON 本身不带类型信息,工具按下面的规则读一遍你的数据(**规则就是这些,没有隐藏逻辑**):
| JSON 里的值 | Java | TypeScript | Python | Go |
|---|---|---|---|---|
| 整数且在 int 范围内 | Integer | number | int | int |
| 整数但超出 int(±2147483648) | Long | number | int | int64 |
| 小数 / 科学计数法 | Double | number | float | float64 |
| true / false | Boolean | boolean | bool | bool |
| 字符串 | String | string | str | string |
| null(这一处是 null) | Object | any | Any | interface{} |
| 空数组 [] | List<Object> | any[] | List[Any] | []interface{} |
| 数组 | List<元素类型> | 元素类型[] | List[元素类型] | []元素类型 |
| 嵌套对象 | 静态内部类 | 嵌套 interface | 独立 dataclass | 独立 struct |
类型冲突与缺失怎么处理(不静默选一个):
- 同一字段在不同数组元素里类型不同(例如一处是数字、一处是字符串):按"无法确定"处理,生成
Object/any,并在结果上方的提示里点名是哪个字段、出现了哪几种类型,由你决定改成什么。 - null:无法从 null 推断类型,单独出现时给
Object/any;与其它类型同时出现时按另一边的类型生成,并在注释里标注"可能为 null"。 - 空数组:不知道元素类型,给
List<Object>/any[]并提示。 - 某字段只在部分元素里出现:TypeScript 标为可选(
name?:),Java / C# / Go 在注释或 tag 里标注(Java 用Integer这类包装类型天然可空)。 - JSON 里的字段名不是合法标识符或撞上语言关键字(
user-name、class、1st、中文名):会改写成合法标识符,并尽最大可能保留原始 key——Java 用@JsonProperty、C# 用[JsonPropertyName]、Go 的json:"…"tag 一定带、Python 用field(metadata={"json": …})、TypeScript 干脆直接用原始 key 当属性名(带引号),因为 TS 没有注解机制、属性名就是运行时字段名。 - 改名后的映射代价(如实说明):Java / C# / Go 靠注解或 tag 自动映射,无需手工处理;TypeScript 用原始 key 所以天然正确;Python 的
metadata只有 dataclasses-json / pydantic 这类库会读,直接Root(**json.loads(x))遇到改名属性会报错;PHP 的json_decode按属性名严格映射,改名属性旁边会写/** 对应 JSON 字段: … */注释,序列化/反序列化时请据此手工处理(或改用数组访问)。 - 数字精度:超过 ±2^53 的整数在 JS 里已经没有精度,工具会提示你改用字符串(生成
String),不要用Long去接一个已经失真的值。 - 类名撞上语言内置类型名(例如字段叫
list派生出的类名List,会遮蔽 Java 的java.util.List/ C# 的System.Collections.Generic.List,直接编译不过):会自动加Model后缀(List→ListModel),同名字段仍然照常生成。
生成的代码是起点不是终点:Java 用 Lombok 还是手写 getter/setter、是否加 @JsonIgnoreProperties(ignoreUnknown = true)、日期字段用 String 还是 LocalDateTime,都请按你项目的规范微调。本工具不联网、不读取你项目的任何配置。
よくある質問
JSON には型情報が無いので、貼っていただいたデータの実際の値から推論するしかありません。null 単独では型が推論できず Object / any になります;空配列は要素型が分からず List<Object> / any[] に;同一フィールドの型が配列要素で不一致のときは「確定不能」として Object / any を生成し、上の通知でどのフィールドにどんな型が現れたか名指しします。ツールは推測も、黙って代わりに選ぶこともしません——これらは「あなたに確認が必要なフィールド」として扱われます。
対象言語の規則に沿って、元の名前をできるだけ保ちます:Java は userName / class_ / _1stLogin に書き換え @JsonProperty("user-name") を付与;C# は [JsonPropertyName];Go は必ず json:"user-name" タグ;Python は class_ のような適法名+field(metadata={"json": "user-name"});TypeScript は最も素直で、プロパティを "user-name": string とそのまま書きます(TS にはアノテーション機構が無く、プロパティ名がそのまま実行時フィールド名——camelCase にすると JSON.parse の結果と合わなくなるため)。中国語キーはそのまま保持(Java / Python / TypeScript はいずれも中国語識別子可)。正直な注意:Python の metadata は dataclasses-json / pydantic 系のライブラリしか読まず、PHP の json_decode はプロパティ名で厳密にマッピングするので、この 2 言語ではリネームされたフィールドを生成コメントに従って手動で繋いでください。
できます。検証は自作の厳格パーサで、エラーは行番号・列番号と人語の一文(例:3 行目 12 列:オブジェクトの属性名はダブルクォート必須)を出します。よくある落とし穴は個別に識別:シングルクォート文字列、コメント、末尾カンマ、先頭ゼロの数字、true/false/null の綴り間違い、閉じ括弧忘れ。さらにネスト 64 階層・ノード 2 万個の上限を設けており、超過したらページを固まらせるのではなく、はっきり伝えます。
六言語——Java(Lombok または素の getter/setter、Jackson @JsonProperty は選択可)、TypeScript インターフェース、Python dataclass、Go struct、C# class、PHP class。アップロードはありません:解析・推論・生成はすべてブラウザ内で完結し、データは端末の外に出ず、ページ更新で消え、アップロードリクエストも第三者依存(CDN)も一切無し。JSON に実名・携帯番号・身分証番号などの敏感フィールドが入っているなら、ローカル変換はまさにそれをどのサーバーにも送らないためのものです。