如何从 Protocol Buffer 结构中生成的 JSON 标签中删除 Omitempty 标签
在某些用例中,可能需要删除为协议缓冲区结构生成的 JSON 标签中的 omitempty 标签。 Protocol buffers,特别是与 gRPC 一起使用时,是数据序列化和传输的强大工具。但是,包含 omitempty 标记可能会导致在 JSON 封送过程中遗漏默认值或空值,这可能是不可取的。
问题
使用时使用 JSON 代理的协议缓冲区,生成的结构可能在 JSON 标签中包含 omitempty 标签,如示例中所示下面:
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 标签,有有两种可能的方法:
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 封送过程中包含默认值或空值。
以上是如何从 Protocol Buffer 结构中的 JSON 中删除 `omitempty` 标签?的详细内容。更多信息请关注PHP中文网其他相关文章!