如何從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中文網其他相關文章!