首頁 › 程式開發 › JSON 產生程式碼
🔧

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 解析。