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

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

Linda Hamilton
リリース: 2024-11-30 13:04:11
オリジナル
794 人が閲覧しました

How to Remove `omitempty` Tags from Protobuf-Generated JSON?

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
}
ログイン後にコピー

注:

  • google.golang.org/protobuf パッケージは、非推奨の github.com/golang/protobuf とその jsonpb を置き換えます。 package.
  • EmitDefaults オプションにより、パッケージが空であることが保証されます。フィールドは JSON 出力に含まれます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート