JSON 程式碼生成
TS · Java · Go · 型別推斷
程式碼生成
就緒
ABOUT
關於 JSON 程式碼生成
根據 JSON 樣本自動推斷欄位型別,生成各語言的結構體或 interface 定義。
型別定義是前後端協作的契約載體。從真實 JSON 樣本生成 TypeScript / Java / Go 型別,比手寫 interface 快一個數量級,也能避免遺漏新增欄位導致的執行時錯誤。
DEEP DIVE
深入瞭解 JSON 程式碼生成
介面對接時,前後端需就資料結構達成一致。手動編寫 TypeScript interface、Java POJO 或 Go struct 既慢又易漏欄位。JSONSort 程式碼生成從 JSON 樣本自動推斷型別,數秒產出可貼上到 IDE 的型別定義。
推斷規則:字串 → string、數字 → number/int、布林 → boolean、陣列 → []Type、物件 → 巢狀結構。null 值會標記為 optional 或 union 型別,貼近真實 API 的稀疏資料特徵。
靜態型別推斷無法替代 OpenAPI/Swagger 的語義描述(format: date-time、enum 約束等)。生成程式碼應視為「90 分起點」:在 IDE 中將 string 改為 Date、新增 enum、標記 optional 等微調不可避免。
FEATURES
核心能力
TypeScript
生成 interface 與 type 定義,含巢狀與陣列型別。
Java
生成 POJO class,含 getter 風格欄位宣告。
Go
生成 struct 與 json tag,符合 Go 慣例。
型別推斷
根據 JSON 值自動選擇合適型別,null 處理為 optional。
巢狀支援
深層巢狀物件遞迴生成子型別/內部類。
本地推斷
API 響應樣本不上傳,保護介面資料結構隱私。
巢狀型別命名
深層物件自動生成子 interface / inner class 名稱。
陣列元素推斷
根據首個非 null 元素推斷 []Type,多樣本可合併型別。
HOW TO USE
使用步驟
-
1
貼上 JSON 樣本
-
2
選擇目標語言(TS / Java / Go)
-
3
複製生成的型別程式碼
-
4
根據輸出語言選項切換 TS / Java / Go 等目標
-
5
將生成程式碼貼上到 IDE,按專案規範微調命名與型別
WORKFLOW
典型工作流
從匯入資料到匯出結果的完整流程,幫助團隊統一 JSON 程式碼生成 的使用方式。
收集樣本
從 Network 複製真實 API 響應,儘量覆蓋各欄位型別。
選擇語言
TS 用於前端,Java/Go 用於服務端 DTO 起點。
複製到 IDE
貼上後執行 formatter,調整 Date/enum 等語義型別。
納入 CI
樣本變更時重新生成,Diff 型別定義捕獲 breaking change。
USE CASES
適用場景
前端開發
Swagger 未及時更新時,從實際響應生成 TS 型別。
後端開發
Java/Go 服務端根據 JSON 樣本生成 DTO 起點。
全棧工程師
前後端共用同一份 JSON 樣本,各自生成語言型別。
開源貢獻
為第三方 API 編寫 SDK 時快速生成型別骨架。
SDK 作者
為第三方 REST API 快速生成客戶端型別骨架。
Monorepo 維護
前後端共享 JSON 樣本,各自生成語言繫結。
TIPS
使用技巧
- 使用真實 API 響應而非手工編造樣本,型別更準確。
- 樣本中儘量包含各欄位的非 null 代表值,避免全部 optional。
- 陣列元素型別基於第一個元素推斷,確保樣本陣列元素結構一致。
- 生成後在 IDE 中微調:Date 字串可改為 Date 型別等。
- 巢狀過深時可先用路徑提取了解結構,再擷取子樹生成。
- 與 Mock 工具配合:生成型別後,用 Mock 生成符合型別的測試資料。
- 合併多次 API 響應樣本(成功/失敗/分頁)可得到更完整 union 型別。
- 欄位名含 - 或空格會自動 sanitise,生成後搜尋確認。
- Go struct tag 已含 json 欄位名,直接用於 encoding/json。
- 生成後與 Mock 工具聯動,確保 Mock 資料符合型別結構。
LOCAL VS ONLINE
本地 vs 線上工具
JSONSort 堅持純前端架構,以下對比說明為何本地化工具更適合處理開發資料。
TROUBLESHOOTING
常見誤區與排查
實際使用中容易遇到的問題及建議處理方式,減少反覆試錯的時間。
欄位全 optional
建議:樣本值含 null;用不含 null 的代表記錄替換。
陣列型別不對
建議:陣列元素結構不一致;統一 schema 或拆分為 union。
reserved word 衝突
建議:生成器已加字尾;仍請 IDE 檢查編譯錯誤。
巢狀過深難讀
建議:用路徑提取擷取子樹分別生成子型別。
FAQ
常見問題
能生成 Python dataclass 嗎?
當前支援 TS / Java / Go。Python 可作為後續擴充。
欄位名是 reserved word 怎麼辦?
生成器會自動加字尾或轉義,如 class → class_。
union 型別怎麼推斷?
同欄位出現多種型別時,生成 union(如 string | number)。
any 型別太多怎麼辦?
樣本中 null 過多;補充含具體值的響應再生成。
能生成 Zod schema 嗎?
當前 TS/Java/Go。Zod 可從 TS 型別二次轉換或使用專門工具。
資料會上傳到伺服器嗎?
不會。JSONSort 所有工具均在瀏覽器本地執行,您的輸入內容不會傳送到任何後端伺服器。
需要註冊或安裝嗎?
不需要。開啟頁面即可使用,無需賬號、無需下載客戶端,也支援 PWA 離線快取。
支援多大的檔案?
取決於瀏覽器記憶體,通常可流暢處理數 MB 級別的資料。超大檔案建議先拆分或使用合併清理工具。