工具用的順手嗎?
你的回饋能幫助我們做得更好
將JSON資料轉換為Protobuf訊息定義
按 Protobuf 風格指南,將 camelCase 自動轉為 snake_case
輸入 JSON 後即可生成對應的 .proto 檔案結構
概覽
了解工具能解決的問題、計算或處理邏輯,以及資料邊界。
這項工具讀取 JSON 物件,或以物件為元素的陣列,依樣本值輸出 Protocol Buffers 的訊息定義文字(.proto)。它產生的是描述欄位、型別與編號的結構草稿,不是將 JSON 內容編碼成 Protobuf 二進位資料;要產生程式碼或序列化訊息,仍須在專案中使用相應的 Protobuf 工具鏈。
可設定根訊息名稱、選填的 package、proto2/proto3 語法,以及是否將欄位名稱轉成 snake_case。布林值對應 bool;整數值依 JavaScript 可讀取的數值及 32 位範圍推為 int32 或 int64;含小數的數值對應 double;文字對應 string。巢狀物件會成為另一個 message,陣列則成為 repeated 欄位。這些對應只依輸入樣本,不代表工具知道欄位的業務含義。
在 .proto 中,message 是一種資料結構宣告;每個欄位有名稱、型別及欄位編號。repeated 表示欄位可包含多個同類值。輸出會依欄位在樣本中的出現順序,從 1 開始編號;巢狀 message 也會各自編號。Protobuf 官方 proto3 指南說明欄位編號須在同一訊息內唯一,訊息投入使用後不應任意更改或重用;因此自動編號適合起草,不足以代替既有協定的編號管理。
指南
依步驟完成操作,並透過範例核對輸入與結果。
輸入合法的 JSON 物件,或首項為物件的陣列。盡量選擇欄位較完整的樣本;若是陣列,後續紀錄不會併入推斷。
填寫根訊息名稱,可留白 package,選 proto2 或 proto3,並決定欄位名是否轉為 snake_case。轉換會隨設定更新。
查看 .proto 文字,確認訊息名稱、巢狀結構、型別、欄位名及編號,再使用複製功能帶入專案。若 JSON 語法錯誤,先依解析錯誤修正輸入;若根值不是物件或物件陣列,工具無法建立結構。
依專案的 Protobuf 版本與規範修改草稿,使用編譯器檢查語法,並用多筆真實形狀的測試資料核對序列化與相容性。
情境
查看這項工具在不同工作與生活流程中的用法。
後端或客戶端開發者手上已有一筆 JSON 請求或回應範例,可先產生巢狀訊息架構,再依完整 API 契約補上缺漏欄位和正式編號。
需要和團隊討論 JSON 資料如何映射成 Protobuf 訊息時,可複製草稿作為評審起點;正式採用前須確認欄位語意、版本策略及各服務共用的既有定義。
問答
集中解答常見疑問與容易混淆的問題。
不會。結果是 .proto 訊息定義文字;二進位訊息需再由專案中的 Protobuf 程式碼與序列化流程產生。
不會。根陣列以及物件陣列都只根據第一個物件推斷;後續才出現的欄位或不同型別不會自動合併,應以代表性樣本補查並手動修訂。
空陣列沒有元素可判型別,會先輸出 repeated string 並附註空陣列;null 會先以 string 欄位占位並附註來源為 null。這些是占位推斷,不是對實際欄位語意的判定。
根輸入必須是物件,或至少含一個物件的陣列。空陣列、純量根值,以及首個陣列元素不是物件時,沒有可推斷的訊息欄位。
須知
使用前了解適用範圍、結果限制與必要提醒。
樣本不能揭示欄位是否必填、可否缺省、完整數值範圍、列舉選項或未來版本的結構。含小數的 JSON 數值會經一般 JavaScript 數字解析;若整數識別碼可能超出可精確表示範圍,請勿將其當數字樣本,改以字串保留原值並依協定決定型別。工具未替你校驗完整 schema、產生二進位資料或判定版本相容。
欄位編號按目前鍵的出現順序自動從 1 遞增,不能直接沿用於既有正式訊息;已發布欄位的編號與名稱需按團隊協定謹慎管理。欄位名稱轉換、重複訊息名稱、空值占位及 proto2/proto3 語法也都應在目標編譯器中確認。正式資料模型請用完整樣本集、既有 schema 與相容性檢查共同審核。
推薦
查找相關工具、專題與可用的 API 能力。