使用說明

JSON 轉 POJO 轉換器:產生 Java 類別或 record

貼上 JSON,就能得到可直接使用的 Java 程式碼:每個物件一個類別,附有 private 欄位、無參數建構子,以及 getter 和 setter;你也可以改成 Java record。巢狀物件會寫在父類別裡面,整份結果可以放進同一個 .java 檔案。需要保留原本的 JSON 鍵名時,可以加上 Jackson 或 Gson 註解。轉換在瀏覽器中進行,你的 JSON 不會上傳。


使用方式:貼上 JSON,複製 Java 程式碼

  1. 把 JSON 貼到 JSON 欄位(欄位顯示「在這裡貼上 JSON...」)。貼上的內容會立刻轉換。如果是自己輸入,停下來約 300 毫秒後程式碼才會更新。
  2. 查看 Java 程式碼 下方的類別。再下面會有一行,例如「已產生 2 個類別。」,告訴你寫出了幾個。
  3. 按下程式碼正下方的 複製。按鈕會短暫顯示「已複製」。請把程式碼存成與根類別同名的檔案,例如 Root.java。
  4. 想改變結果,請展開 設定:輸入 根類別名稱(預設為 Root),在 註解 中選擇 無、Jackson 或 Gson,或勾選 使用 record 取代類別。一變更設定,程式碼就會更新。
  5. 按下 清除 可以清空欄位,重新開始。

範例:貼上 JSON,得到 Java 類別

你貼上的內容:{ "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 物件變成 Address,也就是 Root 裡的一個 public static class,所以一個檔案就夠了。鍵名 user_id 變成了欄位 userId,狀態列會提醒你:「已調整 1 個欄位名稱以符合 Java 的寫法。」

產生 Java record 並加上 Jackson 註解

把 根類別名稱 設為 Order,在 註解 選擇 Jackson,並勾選 使用 record 取代類別。同一份 JSON 就會變成 public record Order(...)。

每個 record 元件都帶有 @JsonProperty("key"),內容是原本的 JSON 鍵名,所以 user_id 仍會對應到 userId。選擇 Gson 時,同樣的元件會改帶 @SerializedName("key"),並附上 Gson 的 import。record 需要 Java 16 或更新版本。

JSON 型別如何對應成 Java 型別

所有型別都是包裝型別(boxed),所以每個欄位都可以缺少或是 null。

數字會依照原本的寫法讀取,所以很長的 ID 不會被四捨五入。import 只在程式碼用到時才會加入。同一個物件裡若有重複的鍵,以最後一個為準。

類別與欄位名稱怎麼決定

根類別名稱會整理成有效的 Java 名稱,欄位留空時則使用 Root。如果 JSON 本身是以物件陣列開頭,Root 描述的是其中一個元素,頁面也會提示你把 JSON 當作 List<Root> 來讀取。

JSON 無法被接受時

讀取方式和 JSON 本身一樣嚴格:註解、單引號和結尾多餘的逗號都會視為錯誤。「無法讀取這份 JSON」下方會顯示清楚的原因和位置,例如「第 3 行,第 5 欄」,像是「解析器停在「}」。請檢查它前面是否少了逗號、冒號、括號或引號。」

像 42 或純數字陣列這種有效但沒有物件的 JSON,會顯示「這份 JSON 裡沒有可以轉成類別的物件。」超過 2,000,000 個字元的文字,以及超過 200 層的巢狀結構,都會被拒絕。


常見問題

如何在 Java 中把 JSON 做成 POJO?

把 JSON 貼到「JSON」欄位,再複製「Java 程式碼」裡的程式碼。每個 JSON 物件會得到一個類別,附有 private 欄位、public 的無參數建構子,以及 public 的 getX 和 setX 方法。把程式碼存成與根類別同名的檔案,例如 Root.java,再用 Jackson 或 Gson 讀取 JSON。

如何把 JSON 陣列轉成 Java 物件?

直接貼上物件陣列即可。工具會把陣列中的一個元素寫成根類別,並提示你把 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 嗎?

可以。在「設定」中勾選「使用 record 取代類別」。每個 JSON 物件會變成 public record Name(Type a, Type b) {},巢狀物件則變成父 record 裡的 record。record 需要 Java 16 或更新版本。註解仍然有效,會放在每個 record 元件上。

為什麼 JSON 數字有時是 Integer,有時是 Double?

型別取決於數字的寫法。整數是 Integer;太大放不下就是 Long;再大就是 BigInteger。寫成有小數點或指數的數字則是 Double,即使它是 1.0。

陣列中的物件鍵不一樣時會怎麼處理?

它們會合併成一個類別,包含任何一個物件出現過的所有鍵,所以只有部分物件才有的鍵也會有欄位。如果某個鍵含有不同型別,或陣列是空的,欄位型別就會是 Object 或 List。這類欄位請自行檢查。

會產生 Kotlin 類別或 Lombok 註解嗎?

不會。輸出是單純的 Java:附 getter 和 setter 的類別,或 record。如果你使用 Lombok,請刪掉 getter 和 setter 方法,並在類別上加 @Data。Kotlin 的 data class 需要另外撰寫。

JSON 可以多大?會上傳嗎?

最多 2,000,000 個字元,巢狀最多 200 層。轉換在你的瀏覽器中進行,所以 JSON 不會上傳,也不會儲存在任何地方。