ネストされた JSON オブジェクトを連結された Java POJO に変換する

ネストされた各 JSON オブジェクトに独立した Java クラスを生成します。各階層が固有の POJO になり、親クラスは型付きフィールドで子を参照します。

Structure

詳細な説明

Java でネスト JSON をモデリングする

実運用の JSON にはほぼ必ずネストオブジェクトが含まれます。ジェネレーターは各ネストオブジェクトを独自のクラスに切り出し、親キーを PascalCase 化した名前を付け、囲んでいるクラスから型付きフィールドで参照させます。

JSON の例

{
  "id": 1,
  "name": "Acme Corp",
  "address": {
    "street": "123 Main St",
    "city": "Springfield",
    "zip": "62704"
  }
}

生成される Java POJO

package com.example.model;

public class Company {
    private Integer id;
    private String name;
    private Address address;
    // getter / setter は省略
}

public class Address {
    private String street;
    private String city;
    private String zip;
    // getter / setter は省略
}

ネストクラスの命名規則

クラス名は JSON キーを PascalCase 規則で変換したものになります。

  • addressAddress
  • shipping_addressShippingAddress
  • billing-infoBillingInfo
  • contactDetailsContactDetails

同じ名前に解決される 2 つのネストオブジェクトがある場合、AddressAddress2Address3 のように数値サフィックスが自動付与されます。

ネストの深さ

階層数の上限はありません。3〜4 階層(Order → LineItem → Product → Pricing)であれば 4 つのクラスが生成され、それぞれが型付き参照で繋がります。

Jackson でのデシリアライズ

ObjectMapper mapper = new ObjectMapper();
Company company = mapper.readValue(json, Company.class);
String city = company.getAddress().getCity();

Jackson は型グラフを自動的に辿るため、ネスト POJO のための追加設定は不要です。

再利用のヒント

同じ論理的型(例えば Address)が元 JSON 内の複数の親に登場する場合、ジェネレーターは現状それぞれ独立したクラスとして出力します。生成後に手動で 1 つの共有クラスに統合すれば重複を避けられます。

ユースケース

本番の REST API は顧客ブロックと明細リストを持つ注文、住所と連絡先を持つ会社情報など、複合リソースを返すのが普通です。ネスト JSON を連結された Java POJO にマッピングすることは、本格的な統合の出発点になります。

試してみる — JSON to Java

フルツールを開く