So entfernen Sie das Omitempty-Tag aus generierten JSON-Tags in Protokollpufferstrukturen
In bestimmten Anwendungsfällen kann es erforderlich sein, das zu entfernen omitempty-Tag aus den JSON-Tags, die für Protokollpufferstrukturen generiert werden. Protokollpuffer sind, insbesondere wenn sie mit gRPC verwendet werden, ein leistungsstarkes Werkzeug für die Datenserialisierung und -übertragung. Die Einbeziehung des omitempty-Tags kann jedoch dazu führen, dass beim JSON-Marshalling Standard- oder Leerwerte weggelassen werden, was möglicherweise nicht wünschenswert ist.
Das Problem
Bei der Verwendung Wenn Sie Protokollpuffer mit einem JSON-Proxy verwenden, enthält die generierte Struktur möglicherweise omitempty-Tags, die in den JSON-Tags enthalten sind, wie im Beispiel zu sehen ist unten:
message Status { int32 code = 1; string message = 2; }
Die resultierende generierte Struktur:
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"` }
Die Lösung
Um das omitempty-Tag aus den generierten Strukturen zu entfernen, klicken Sie hier Es gibt zwei mögliche Ansätze:
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 }
Durch die Implementierung eines dieser Ansätze können Sie die omitempty-Tags effektiv aus den für generierten JSON-Tags entfernen Ihre Protokollpufferstrukturen, um sicherzustellen, dass beim JSON-Marshalling Standard- oder leere Werte enthalten sind.
Das obige ist der detaillierte Inhalt vonWie entferne ich „omitempty'-Tags aus JSON in Protokollpufferstrukturen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!