JSON to POJO 変換:JSONからJavaクラスやrecordを作成
JSONを貼り付けると、そのまま使えるJavaコードが得られます。オブジェクトごとにクラスを作り、privateフィールド、引数なしコンストラクタ、getterとsetterを備えています。お好みでJavaのrecordにもできます。入れ子のオブジェクトは親クラスの中に書かれるので、結果全体を1つの.javaファイルに収められます。元のJSONキーが必要なときは、JacksonかGsonのアノテーションを追加してください。変換はブラウザ内で行われ、JSONがアップロードされることはありません。
JSON to POJO online:使い方
- JSON 欄にJSONを貼り付けてください(欄には「ここにJSONを貼り付け...」と表示されています)。貼り付けた内容はすぐに変換されます。入力した場合は、手を止めてから約300ミリ秒後にコードが更新されます。
- Javaコード の下にあるクラスを確認してください。その下の「2個のクラスを生成しました。」のような行で、いくつ書き出されたかが分かります。
- コードのすぐ下にある コピー を押してください。ボタンの表示が一瞬「コピー完了」に変わります。コードはルートクラスと同じ名前のファイル(例:
Root.java)に保存してください。 - 結果を変えるには 設定 を開きます。ルートクラス名(初期値は
Root)を入力し、アノテーション で なし・Jackson・Gson から選ぶか、クラスの代わりにレコードを使う にチェックを入れてください。設定を変えるとすぐにコードが更新されます。 - 消去 を押すと、入力欄が空になり、最初からやり直せます。
JSON to POJO converter の例:JSONを入れるとJavaクラスが出る
貼り付けるJSONの例です:{ "user_id": 7, "name": "Ana", "price": 4.5, "tags": ["a", "b"], "address": { "city": "Kyoto" } }
アノテーション を「なし」にすると、結果は import java.util.List; と public class Root から始まります。フィールドは Integer userId、String name、Double price、List<String> tags、Address address です。続いて引数なしコンストラクタと、getUserId・setUserId のようなgetterとsetterが並びます。
入れ子の address オブジェクトは、Root の中の public static class である Address になります。そのため、ファイルは1つで足ります。キー user_id はフィールド userId になりました。ステータス行には「1個のフィールド名をJavaに合わせて変更しました。」と表示されます。
JSON Java record と Jackson アノテーション
ルートクラス名 を Order にし、アノテーション で Jackson を選び、クラスの代わりにレコードを使う にチェックを入れます。同じJSONが public record Order(...) になります。
recordの各コンポーネントには、元のJSONキーを持つ @JsonProperty("key") が付くので、user_id は引き続き userId に対応します。Gson を選ぶと、同じコンポーネントに @SerializedName("key") が付き、Gsonのimportも加わります。recordにはJava 16以降が必要です。
JSONの型とJavaの型の対応
型はすべてボクシング型なので、どのフィールドも欠けていたりnullだったりして構いません。
7のような整数:Integer。それに収まらない大きさ(12345678901):Long。さらに大きい数(99999999999999999999):BigInteger(importも付きます)。4.5、1.0、2e3のように小数点や指数がある数:Double。- 文字列:
String。trueまたはfalse:Boolean(getterはisActiveではなくgetActiveです)。null:Object。 ["a", "b"]のように1種類の型の配列:List<String>(java.util.Listをimport)。空の配列や型が混在する配列:List<Object>。配列の中の配列:List<List<Integer>>。- オブジェクト:キーの名前を付けた入れ子のクラスまたはrecord。
数値は書かれたとおりに読み取られるため、桁の長いIDが丸められることはありません。importはコードが使うときだけ追加されます。同じオブジェクトに同じキーが2回あるときは、最後のものが使われます。
クラス名とフィールド名の付け方
user_idとuser-nameは、フィールドuserIdとuserNameになります(キャメルケース)。classのようなJavaの予約語は_classになります。2ndのように数字で始まる名前は_2ndになります。- オブジェクトの配列を持つキー
itemsは、クラスItemとフィールドList<Item>になります。キーは単数形に直されます。 - オブジェクトを持つキー
StringはStringDataになります。String・List・Objectを隠してしまう名前には、末尾にDataが付きます。 - 同じ名前のオブジェクトが2つあるとき、2つ目のクラスには番号が付きます。ファイル内のクラス名は重複できないためです。
ルートクラス名は有効なJava名に整えられ、欄が空のときは Root になります。JSON自体がオブジェクトの配列で始まる場合、Root は1つの要素を表し、画面には「JSONは List<Root> として読み込んでください」という趣旨の案内が出ます。
JSONが受け付けられないとき
読み取りはJSONの規則どおり厳密です。コメント、シングルクォート、末尾のカンマはエラーになります。「このJSONを読み取れませんでした」の欄に、理由と「3行目、5列目」のような位置が表示されます。たとえば「「}」の位置で解析が止まりました。直前に、カンマ、コロン、括弧、引用符の抜けがないか確認してください。」と出ます。
- キーに引用符がない、またはシングルクォートを使ったJavaScriptオブジェクトの場合は、先に「JavaScriptオブジェクトをJSONに変換」を通すと、厳密なJSONになります。
- 変換の前にJSONを整えたいときは、「JSON整形ツール」を使ってください。
- JSONをスキーマで検証したいときは、「JSON Schema バリデーター」を使ってください。
- JavaScriptからTypeScriptのインターフェースを作りたいときは、「JS→TS変換ツール」をご覧ください。
42や数値だけの配列のように、正しいJSONでもオブジェクトがない場合は、「このJSONには、クラスにできるオブジェクトがありません。」と表示されます。200万文字を超えるテキストと、200階層より深い入れ子は受け付けられません。
よくある質問
JavaでJSONをPOJOに変換するには、どうすればよいですか?
JSONを「JSON」欄に貼り付け、「Javaコード」のコードをコピーしてください。JSONのオブジェクトごとに1つのクラスが作られ、privateフィールド、publicの引数なしコンストラクタ、publicのgetXとsetXメソッドが付きます。コードはルートクラスと同じ名前のファイル(例:Root.java)に保存し、JacksonまたはGsonでJSONを読み込んでください。
JSONの配列をJavaのオブジェクトに変換するには?
オブジェクトの配列をそのまま貼り付けてください。配列の1要素がルートクラスとして書かれ、JSONはListとして読み込むよう案内されます。JacksonならTypeReference>、GsonならTypeToken>を使います。オブジェクトの中にある配列は、キー名を付けたクラスのListフィールドになります。
JacksonやGsonで元のJSONキーを残すには?
「設定」を開き、「アノテーション」でJacksonまたはGsonを選んでください。Jacksonは各フィールドに@JsonProperty("key")、Gsonは@SerializedName("key")を付け、importも加えます。「なし」では、user_idのようなキーがフィールドuserIdになり、アノテーションや命名戦略で元のキーを保たない限り、JSONには対応しません。
JSONからJavaのrecordを作れますか?
はい。「設定」で「クラスの代わりにレコードを使う」にチェックを入れてください。JSONの各オブジェクトはpublic record Name(Type a, Type b) {}になり、入れ子のオブジェクトは親recordの中のrecordになります。recordにはJava 16以降が必要です。アノテーションも使え、各コンポーネントに付きます。
JSONの数値が、場所によってIntegerになったりDoubleになったりするのはなぜですか?
型は数値の書き方で決まります。整数はInteger、Integerに収まらなければLong、Longにも収まらなければBigIntegerです。小数点や指数を付けて書いた数は、1.0であってもDoubleになります。
配列の中のオブジェクトでキーが異なる場合はどうなりますか?
どれか1つにでも現れたキーをすべて持つ、1つのクラスにまとめられます。一部のオブジェクトにしかないキーにもフィールドができます。キーに複数の型が混ざる場合や配列が空の場合は、フィールドの型がObjectまたはListになります。そうしたフィールドは手で確認してください。
Kotlinのクラスや、Lombokのアノテーションは生成されますか?
いいえ。出力は、getterとsetterを持つクラスか、recordの素のJavaです。Lombokを使う場合は、getterとsetterのメソッドを削除し、クラスに@Dataを付けてください。Kotlinのdata classは別に書く必要があります。
JSONはどのくらいの大きさまで扱えますか? アップロードされますか?
200万文字まで、入れ子は200階層までです。変換はお使いのブラウザ内で行われるため、JSONがアップロードされたり保存されたりすることはありません。
おすすめ
-
Amazonベーシック スマホスタンドテスト用のAndroid端末をノートPCの横に立てて、新しいモデルクラスがレスポンスを読み込む様子をすぐ確認できます。
-
ソニー ノイズキャンセリングヘッドホン WH-CH720N長いJSONレスポンスをモデルクラスに起こす間も、オフィスの雑音を抑えて集中できます。
-
Elgato Stream Deck Neo ショートカットキービルド・実行・テストをワンキーに登録すれば、新しいエンドポイントの確認が一回の操作で済みます。
無料でツールを続ける支えになります。✨
画像はイメージです。 Amazonのアソシエイトとして、Capsule Toolsは適格販売により収入を得ています。