ホームページ >バックエンド開発 >Golang >Protobuf で生成された JSON から「omitempty」タグを削除するにはどうすればよいですか?

Protobuf で生成された JSON から「omitempty」タグを削除するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-30 13:25:13856ブラウズ

How to Remove the `omitempty` Tag from Protobuf-Generated JSON?

プロトコル バッファーで生成された JSON タグから Omitempty タグを削除する

概要

プロトコル バッファー (Protobuf) は言語です- シリアル化のための中立、プラットフォーム中立の拡張可能なメカニズム構造化データ。 Protobuf を使用する場合、*.pb.go ファイルで生成された JSON タグからomitempty タグを削除する必要がある場合があります。この記事では、さまざまな方法を使用してこれを実現する方法について説明します。

grpc-gateway オプション

grpc-gateway を利用する場合、ServeMux の作成時に次のオプションを含めることで、 JSON マーシャリング中にデフォルト値が存在します:

gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))

protobufパッケージ

grpc-gateway の外部では、google.golang.org/protobuf/encoding/protojson パッケージ (非推奨の github.com/golang/protobuf/jsonpb に置き換わります) を使用してプロトコルをマーシャリングできます。メッセージをバッファリングします。 EmitDefaults: true を設定して Marshaler 構造体を利用すると、デフォルト値が JSON 出力に含まれます:

func sendProtoMessage(resp proto.Message, w http.ResponseWriter) {
    w.Header().Set("Content-Type", "application/json; charset=utf-8")
    m := protojson.Marshaler{EmitDefaults: true}
    m.Marshal(w, resp) // Error handling omitted
}

以上がProtobuf で生成された JSON から「omitempty」タグを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。