JSON 產生程式碼
貼上一段介面回傳的 JSON,產生 TypeScript、Java、C#、Go、Python、Dart 六種資料類別與 JSON Schema,自動推斷可空與型別衝突、拆分巢狀物件
JSON 样本
解析、推断与代码生成都在浏览器本地完成,页面不发任何网络请求。
样本只提供结构线索:字段值不会出现在生成的代码里,字段名与可空性由样本推断。
样本只提供结构线索:字段值不会出现在生成的代码里,字段名与可空性由样本推断。
生成选项
TypeScript
Java
C#
Go
Python
Dart
生成代码
粘贴 JSON 后自动生成代码
工具介紹
介面文件經常只有一句「回傳如下 JSON」,而你要落地的是一整套型別定義。手寫這件事不難,但極費時間且容易漏:欄位有幾十個、陣列裡的元素是物件、有的鍵在某條樣本裡是 null,還有 order-id、class、中文鍵這類不能直接當識別字的名字。這個工具把推斷寫成看得見的規則,並在產生結果裡把每一條都標出來,而不是給你一段猜出來的程式碼。
能產生什麼
- TypeScript:
interface或type別名兩種寫法,可選欄位帶?,未知型別可寫成unknown或any - Java:私有欄位加讀寫方法的實體類別,數字可選
int/double/BigDecimal,非法或保留字鍵名改寫後用@JsonProperty記住原名 - C#:record 或 class,屬性名走 PascalCase,原始鍵名保留在
JsonPropertyName裡 - Go:struct 加
json標籤,任意型別可選interface{}(相容舊版本)或any(Go 1.18+) - Python:標準庫
dataclasses加型別註解,或 pydantic v2 模型並用Field(alias=...)保留原鍵名 - Dart:帶
fromJson/toJson的類別,可空欄位用?,巢狀物件拆成獨立類別 - JSON Schema:draft-07 結構,含
type、required、items、$ref定義,可直接餵給校驗函式庫或另一套程式碼產生器
推斷的具體規則
- 型別取自樣本:字串、布林、整數、小數、null、陣列、物件分別對應到各語言的自然寫法,整數與小數同時出現在一個位置時統一按小數產生並提示
- 可空性:樣本裡出現過
null的欄位標成可選或可空,不同語言用各自慣用表達(?、包裝型別、Optional、指標) - 陣列元素合併:同一個陣列裡多個物件的欄位取聯集,共同出現過的進
required,只部分出現的記為可選;空陣列無法推斷元素型別,按任意型別處理並明確提示 - 巢狀物件拆類:物件陣列與深層物件各自產生獨立型別,命名按「根型別名 + 欄位名」拼出,避免一個巨型匿名結構
- 型別衝突不硬猜:同一位置既像字串又像物件時,取更寬的任意型別並給出「型別衝突:x 與 y」的提示,告訴你哪種欄位樣本給少了
- 鍵名合法化:中文鍵、帶
-與空格的鍵、各語言保留字都會改成合法識別字,原名保留在註解或標籤裡;也可以切到「保留原始鍵名」讓產生器加引號硬寫 - 重複鍵名:同一個物件裡出現兩次同名鍵時取最後一次的值,並在提示裡指出位置,因為這類 JSON 各解析函式庫行為並不一致
怎麼讓產生的型別更準
- 樣本儘量覆蓋真實情況:把可能為
null的欄位、只有部分通路才有的欄位、空陣列與非空陣列各來一條,多貼幾條再合併比貼一條大全更可靠 - 陣列元素差異極大(聯合型別)時,工具會合併成聯集,此時人工拆成兩個型別往往更清楚
- 金額這類精度敏感的欄位,把數字型別宣告改成精確小數,不要用雙精度浮點
- 大檔案先裁:超過 2 MB 的樣本型別推斷仍然能跑,但產生結果會非常龐大,建議只保留代表性片段
常見問題
- 產生的型別準確嗎?準確程度取決於樣本,工具做的是「依你給的範例取聯集」,無法知道你沒貼出來的欄位。所有推斷出的可疑之處都以提示形式列出,不會靜默猜一個型別
- 為什麼欄位被重新命名了?目標語言的識別字規則不允許原鍵名,例如 Go 的結構體欄位必須大寫開頭、Java 不能用
class當欄位名。改名對應都寫進註解或標籤,序列化結果仍是原鍵名 - 能把已有型別改回去嗎?鍵名策略切到「保留原始鍵名」即可按原名產生(必要時加引號),代價是部分語言裡需要額外寫法
- 支援多份 JSON 一起推斷嗎?把多條回應拼成陣列貼進來,陣列元素的欄位會被合併推斷,這也是覆蓋可空欄位最省事的做法
- 資料會上傳嗎?不會。解析、推斷、產生、格式化全部在瀏覽器裡完成,頁面不發送任何請求,樣本只留在目前分頁
- 產生的 Schema 有什麼用?可以直接給校驗函式庫做介面輸入參數檢查,也能作為其他程式碼產生器的輸入,或放進介面文件當資料結構說明
- 下載和複製哪個方便?複製直接進剪貼簿方便貼進既有檔案;下載按目標語言給出正確副檔名,適合一次產生多個模型檔
- 提示裡的「空物件」是什麼意思?樣本裡那個物件沒有任何鍵,產生器只能按字典型別產出。補一條有內容的樣本才能得到具體欄位
樣本本身格式混亂先用 JSON 格式化排好;要轉成設定陣列見 JSON 轉 PHP;匯出表格用 JSON 轉 CSV 或 JSON 轉 Excel;產生的 JS/TS 程式碼要排版參考 JS 程式碼格式化;排查欄位名規則可用正規表示式測試;除錯登入態介面時的令牌解讀見 JWT 解析。