プロトコル バッファー構造体で生成された 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 つあります:
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
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 サイトの他の関連記事を参照してください。