JSON ↔ Protobuf 工具箱
從 JSON 推斷 .proto 結構描述,或用你的結構描述編碼和解碼 Protobuf 訊息
貼上 JSON 範例或載入範例,然後選擇「產生 .proto」。
三種轉換,各自獨立
JSON → .proto 根據 JSON 範例推斷 proto3 結構描述。JSON → Protobuf 使用你自己的 .proto 結構描述和訊息類型把 JSON 訊息編碼為二進位,Protobuf → JSON 則把十六進位、base64 或二進位檔案解碼回 JSON。推斷結構描述和真正的編碼是不同的工作,因此各有獨立模式。
結構描述如何推斷
預設情況下,文字變為 string,布林值變為 bool,小數變為 double,整數變為 int64,因為今天放得進 int32 的值明天未必可以。物件變為以鍵名 PascalCase 命名的訊息,單一類型的陣列變為 repeated 欄位,陣列中的所有物件會合併,以免漏掉選填的鍵。只有 null、空白或類型混合的值使用 google.protobuf.Value,並列在說明中。欄位編號依鍵的順序分配;結構描述上線後,它們就是傳輸格式的一部分,不能再變更。
編碼與解碼
JSON 使用 ProtoJSON 對應:lowerCamelCase 欄位名稱,64 位元整數為字串,bytes 為 base64,列舉為名稱,以及 Timestamp、Duration、Struct 和包裝類型等常用類型的特殊形式。進階選項可以輸出預設值、保留 proto 欄位名稱、把列舉寫成數字或忽略未知的 JSON 欄位。解碼時會列出所選訊息未宣告的欄位編號,這通常表示選錯了訊息類型。
限制與隱私
結構描述必須自給自足:已內建 Google 常用類型(Timestamp、Duration、Struct、Any、Empty、FieldMask 和包裝類型),其他匯入絕不會從網路取得。單一範例無法揭露列舉、映射、存在性或演進計畫,因此請審查每個推斷出的結構描述。所有處理都在瀏覽器中進行;訊息和結構描述不會上傳。
