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 クラスの使い方

  1. JSON 入力 に JSON のサンプルを貼り付けます(サンプルを読み込む や ファイルを開く も使えます)。
  2. ルート型の名前 を設定します(既定は Root)。
  3. 出力スタイル として getter/setter 付きクラス (Jackson) または レコード Record(Java 16+) を選びます。
  4. 生成された 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 を標準コンストラクターでデシリアライズします。

他のカテゴリを見る