JSON ↔ Protobuf ツールキット
JSON から .proto スキーマを推論、または自分のスキーマで Protobuf をエンコード・デコード
JSON サンプルを貼り付けるか例を読み込み、「.proto を生成」を選んでください。
3 つの変換を別々に
JSON → .proto は JSON サンプルから proto3 スキーマを推論します。JSON → Protobuf は自分の .proto スキーマとメッセージ型で JSON ペイロードをバイナリにエンコードし、Protobuf → JSON は 16 進数・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、ラッパー)は同梱されており、その他のインポートをネットワークから取得することはありません。1 つのサンプルでは列挙型・マップ・プレゼンス・進化の計画は分からないため、推論したスキーマは必ずレビューしてください。処理はすべてブラウザ内で行われ、ペイロードやスキーマはアップロードされません。
