JSON → Java POJO
JSONからJava POJOクラスを即座に生成。Jackson・Gson・Lombokアノテーション対応。ネストオブジェクト・配列・カスタムルートクラス名に対応。無料、ブラウザ内で処理。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
型マッピング
null→Object- 文字列 →
String - 整数 →
int(int の範囲を超える値はlong) - 浮動小数点数 →
double - 真偽値 →
boolean - 配列 →
List<T> - ネストオブジェクト → 独立した
public class
例
以下のJSONを入力した場合:
{"user": {"first_name": "Alice", "age": 30}, "tags": ["admin"]}
Lombokモードで生成される出力:
import java.util.List;
import lombok.Data;
@Data
public class RootObject {
private User user;
private List<String> tags;
}
@Data
public class User {
private String firstName;
private int age;
}
例:明細を含む注文(Jackson モード)
入力:
{"order_id": 9007, "customer": {"name": "Alice", "vip": true}, "items": [{"sku": "A-1", "qty": 2, "price": 9.5}, {"sku": "B-2", "qty": 1, "price": 20}], "note": null}
出力(getter / setter は省略):
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
public class RootObject {
@JsonProperty("order_id")
private int orderId;
private Customer customer;
private List<ItemsItem> items;
private Object note;
// getters and setters omitted here
}
public class Customer {
private String name;
private boolean vip;
// ...
}
public class ItemsItem {
private String sku;
private int qty;
private double price;
// ...
}
この出力は 1 ファイルのままではコンパイルできません。public class は同名のファイルに置く必要があるため、RootObject.java・Customer.java・ItemsItem.java に分けます。分けると「アノテーションなし」モードの出力は javac 21 でそのままコンパイルできます。
生成後に確認すること
priceはdoubleです。1 件目は9.5、2 件目は20で、ツールはintとdoubleを広い方のdoubleにまとめます。金額ならBigDecimalに直してください。- サンプル中の
nullはObjectになります。実際の型に置き換えます。 - int の範囲を超える整数(ミリ秒のタイムスタンプ
1730000000000など)はlongになります。サンプルの値が小さくても将来大きくなる ID は、自分でlongにします。 - Lombok モードは
@JsonPropertyを付けないため、order_idがorderIdに対応しなくなります:
import java.util.List;
import lombok.Data;
@Data
public class RootObject {
private int orderId;
private Customer customer;
private List<ItemsItem> items;
private Object note;
}
Lombok モードでは @JsonProperty を自分で付けるか、Jackson に PropertyNamingStrategies.SNAKE_CASE を設定します。Gson モードは同じ目的で @SerializedName を使います。
Jackson での読み込み:
ObjectMapper mapper = new ObjectMapper();
RootObject order = mapper.readValue(json, RootObject.class);
Java 16 以降なら、小さな不変モデルはクラスの代わりに record にできます。Jackson は 2.12 から record を読めます:
public record Customer(String name, boolean vip) {}
例:同じキーで構造が違う場合と、Java の名前にできないキー(Jackson モード)
{"billing": {"address": {"city": "Paris"}}, "shipping": {"address": {"line1": "1 Main St"}}, "class": "A", "2fa": true, "URL": "https://example.com"}
出力(getter / setter の大部分は省略):
import com.fasterxml.jackson.annotation.JsonProperty;
public class RootObject {
private Billing billing;
private Shipping shipping;
@JsonProperty("class")
private String classValue;
@JsonProperty("2fa")
private boolean t2fa;
@JsonProperty("URL")
private String uRL;
@JsonProperty("URL")
public String getURL() {
// 残りの getter / setter は省略
}
public class Address {
private String city;
// ...
}
public class ShippingAddress {
private String line1;
// ...
}
- 2 つの
addressはフィールドが違うので、2 つ目は親の名前を前に付けます(ShippingAddress)。フィールドと型が同じオブジェクトは 1 つのクラスを共有します。前置きしても名前が重なるときは番号を付けます。 - Java のキーワードとリテラルには
Valueを付け(class→classValue)、数字で始まる名前にはTを付け(2fa→t2fa)、同じ名前になるキーには番号を付けます(first-nameとfirst_name→firstNameとfirstName2)。元のキーはアノテーションに残ります。 - Jackson は
getURL()をuRLではなくurlと読みます。getter と setter にアノテーションがないと別のプロパティができ、URLを読むときにエラーになります。Gson はフィールドだけを読むので不要です。
ツールのテストでは javac 21、Jackson 2.17.2、Gson 2.11.0 で Jackson / Gson の各出力をコンパイルし、サンプルを読み込んで書き戻すと元の JSON と一致します。Lombok 1.18.34 の各出力もコンパイルできます。
制限
- なし・Lombok モードは Java の名前しか持ちません。この 2 つでは
classValue・t2faはclass・2faに対応しません。キーが Java の名前として使えないときは Jackson か Gson モードを使ってください。 - Jackson は空のキーを書き出せません。
@JsonProperty("")は「既定の名前を使う」という意味なので、キー""には@JsonAlias("")とコメントを出力します。Jackson は{"": 4}を読めますが、書き戻すと{"t": 4}になります。Gson モードは@SerializedName("")で空のキーを保ちます。
FAQ
このツールは何を生成しますか?
JSONからJava POJO(Plain Old Java Object)クラスを生成します。ネストオブジェクトはそれぞれ独立したpublicクラスになり、プライベートフィールドとgetter/setterメソッドを含みます(Lombokモードでは@Dataを使用)。
どのアノテーションモードに対応していますか?
4つのモード:なし(純粋なPOJO、getter/setter付き)、Jackson(@JsonProperty)、Gson(@SerializedName)、Lombok(@Data)。Jackson・Gson モードは JSON キーとフィールド名が違うときにフィールドへアノテーションを付けます。Jackson が getter / setter から導く名前がフィールド名と違うとき(getURL は url と読まれる)、Jackson モードは getter と setter にも付けます。なし・Lombok モードは元のキーを保持しません。
JSONの型はJavaの型にどのようにマッピングされますか?
string→String、integer→int(int の範囲外は long)、float/double→double、boolean→boolean、null→Object、array→List<T>、ネストオブジェクト→独立クラス。
Listのインポートはいつ追加されますか?
配列フィールドが存在する場合、import java.util.Listが自動的に追加されます。
データはサーバーに送信されますか?
いいえ。変換処理はすべてブラウザ内で実行されます。データは外部に送信されません。