JSON から Java クラスへ(POJO または Record)
JSON から getter/setter 付きの Java POJO または Java 16 の record を作成します。特殊なキーには Jackson の @JsonProperty を使い、入れ子の static クラスにも対応。
ネストした型は static なネストクラスになります。Java の名前として無効なキーには @JsonProperty (Jackson) を付けます。
すべてブラウザ内で実行されます。データがアップロードされることはありません。
関連ツール
すべて表示JSON から Java クラスとは?
JSON のサンプルから、private フィールドと getter/setter を持つ従来の POJO、またはコンパクトな Java の record として、Java のモデルクラスを生成します。入れ子のオブジェクトは、ルート型の内側の static ネストクラス(またはネストした record)になります。
JSON から Java クラスの使い方
- JSON 入力 に JSON のサンプルを貼り付けます(サンプルを読み込む や ファイルを開く も使えます)。
- ルート型の名前 を設定します(既定は
Root)。 - 出力スタイル として getter/setter 付きクラス (Jackson) または レコード Record(Java 16+) を選びます。
- 生成された Java のコードをコピーするか、ダウンロード してファイルとして保存します。
例
{"id":1,"name":"A","tags":["x"]} import java.util.List;
public class Root {
private long id;
private String name;
private List<String> tags;
public long getId() { return id; }
public void setId(long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public List<String> getTags() { return tags; }
public void setTags(List<String> tags) { this.tags = tags; }
} JSON から Java クラスを使うべき場面
Spring、Jackson、Gson のコードの DTO を素早く作るときに使います。日付(LocalDate、Instant)や列挙型などの型は手動で調整し、コードベースの方針によっては入れ子のクラスをファイルに分けてください。
JSON から Java クラスの仕組み
サンプルを再帰的にたどり、各位置で見つかった型を集めます。オブジェクトの配列は 1 つの型にまとめられ、一部の要素にないキーはオプショナル、どこかで null になるキーは null 許容になります。整数と小数が混在する場合は浮動小数点型になり、それ以外で型が混在する場合は動的な型にフォールバックします。入れ子のオブジェクトは名前付きの型になり(キーのパスカルケースで、配列のキーは単数形にします:orders → Order)、名前が衝突した場合は数字の接尾辞が付きます。Java の出力では、必須の値にはプリミティブの long/double/boolean、null 許容またはオプショナルな値にはボックス型の Long/Double/Boolean を使い、さらに String、配列には List<T>、動的な値には Object を使います。フィールド名はキャメルケースで、JSON のキーと異なる場合は Jackson の @JsonProperty("key") アノテーションが追加され、import も自動的に含まれます。
一般的な使用例
- Spring Boot の REST クライアント用の DTO を作る
- Kafka のコンシューマー用に JSON メッセージをモデル化する
- 不変な設定用の record を生成する
- Java のテストデータを素早く用意する
よくある質問
Jackson は必要ですか?
一部のキーが Java の名前として使えない場合にのみ @JsonProperty が使われます。それ以外は素の Java クラスなので、Gson でも動作します。
なぜ int ではなく long なのですか?
JSON の数値(ID やタイムスタンプなど)は int の範囲を超えることがあります。long ならオーバーフローを避けられます。値が小さいと分かっている場合は int に変更してください。
record は Jackson で使えますか?
はい。Jackson 2.12 以降は、Java の record を標準コンストラクターでデシリアライズします。