Heim >Backend-Entwicklung >Golang >Wie entferne ich das „omitempty'-Tag aus Protobuf-generiertem JSON?

Wie entferne ich das „omitempty'-Tag aus Protobuf-generiertem JSON?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-30 13:25:13858Durchsuche

How to Remove the `omitempty` Tag from Protobuf-Generated JSON?

Entfernen des Omitempty-Tags aus vom Protokollpuffer generierten JSON-Tags

Einführung

Protocol Buffers (Protobuf) ist eine Sprache -neutraler, plattformneutraler erweiterbarer Mechanismus zur Serialisierung strukturierter Daten. Bei der Arbeit mit Protobuf kann es erforderlich sein, das omitempty-Tag aus den in den *.pb.go-Dateien generierten JSON-Tags zu entfernen. In diesem Artikel wird erläutert, wie dies mit verschiedenen Methoden erreicht werden kann.

grpc-gateway-Option

Wenn Sie grpc-gateway verwenden, wird dies durch Einschließen der folgenden Option beim Erstellen des ServeMux sichergestellt Beim JSON-Marshalling sind Standardwerte vorhanden:

gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))

protobuf Paket

Außerhalb von grpc-gateway kann das Paket google.golang.org/protobuf/encoding/protojson (das jetzt das veraltete Paket github.com/golang/protobuf/jsonpb ersetzt) ​​zum Marshallen des Protokolls verwendet werden Puffernachrichten. Durch die Verwendung der Marshaler-Struktur mit dem Satz EmitDefaults: true werden Standardwerte in die JSON-Ausgabe einbezogen:

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) // Error handling omitted
}

Das obige ist der detaillierte Inhalt vonWie entferne ich das „omitempty'-Tag aus Protobuf-generiertem JSON?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn