ホームページ > バックエンド開発 > Golang > プロトコルバッファ構造体のJSONから`omitempty`タグを削除するにはどうすればよいですか?

プロトコルバッファ構造体のJSONから`omitempty`タグを削除するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-14 16:45:11
オリジナル
994 人が閲覧しました

How to Remove `omitempty` Tags from JSON in Protocol Buffer Structs?

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

特定の使用例では、プロトコル バッファ構造体用に生成された JSON タグから空のタグを省略します。プロトコル バッファーは、特に gRPC で使用する場合、データのシリアル化と転送のための強力なツールです。ただし、omitempty タグを含めると、JSON マーシャリング中にデフォルト値または空の値が省略される可能性があり、望ましくない可能性があります。

問題

使用時JSON プロキシを使用したプロトコル バッファーでは、例に示すように、生成された構造体の JSON タグに空のタグが含まれていない可能性があります。以下:

message Status {
  int32 code = 1;
  string message = 2;
}
ログイン後にコピー

生成された構造体:

type Status struct {
  Code int32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"`
  Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"`
}
ログイン後にコピー

解決策

生成された構造体からomitemptyタグを削除するには、考えられるアプローチは 2 つあります:

  1. を使用するgrpc-gateway: grpc-gateway を使用している場合は、次のオプションを使用してservemux を構成できます:
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
ログイン後にコピー
  1. google.golang.org を使用する/protobuf/encoding/protojson: grpc-gateway の外部のアプリケーションの場合は、マーシャリング用の標準の 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) // You should check for errors here
}
ログイン後にコピー

これらのアプローチのいずれかを実装することで、生成された JSON タグから omitempty タグを効果的に削除できます。プロトコル バッファ構造体を作成し、JSON マーシャリング中にデフォルト値または空の値が確実に含まれるようにします。

以上がプロトコルバッファ構造体のJSONから`omitempty`タグを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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