Protobuf で生成された JSON から Omitempty タグを削除する
JSON プロキシで使用する Protobuf クラスを生成するときに、生成された構造体。これらのタグは、JSON マーシャリング中に空のフィールドを抑制しますが、これは特定のシナリオでは望ましくない場合があります。
生成された構造体から omitempty タグを削除するには:
grpc-gateway を使用する
grpc-gateway を使用している場合は、次のように指定することで、omitempty 動作を無効にできます。 servemux を作成するときの次のオプション:
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
grpc-gateway の外側
grpc-gateway の外側で省略空の動作を行わずに Protobuf メッセージをマーシャリングするには、次を使用します。標準のencoding/jsonの代わりにgoogle.golang.org/protobuf/encoding/protojsonパッケージパッケージ:
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) // Check for errors here }
注:
以上がProtobuf で生成された JSON から「omitempty」タグを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。