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

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

Linda Hamilton
Freigeben: 2024-11-30 13:04:11
Original
867 Leute haben es durchsucht

How to Remove `omitempty` Tags from Protobuf-Generated JSON?

Entfernen von Omitempty-Tags aus Protobuf-generiertem JSON

Beim Generieren von Protobuf-Klassen für die Verwendung mit einem JSON-Proxy können Sie auf die Omitempty-Tags stoßen die generierten Strukturen. Diese Tags unterdrücken leere Felder beim JSON-Marshalling, was in bestimmten Szenarien unerwünscht sein kann.

So entfernen Sie die omitempty-Tags aus den generierten Strukturen:

Verwenden von grpc-gateway

Wenn Sie grpc-gateway verwenden, können Sie das Omitempty-Verhalten deaktivieren, indem Sie die folgende Option angeben Erstellen Ihres Servemux:

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

Außerhalb von grpc-gateway

Um Ihre Protobuf-Nachricht ohne das omitempty-Verhalten außerhalb von grpc-gateway zu marsallieren, verwenden Sie google.golang .org/protobuf/encoding/protojson-Paket anstelle des Standard-Encoding/json-Pakets Paket:

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) // Check for errors here
}
Nach dem Login kopieren

Hinweis:

  • Das Paket google.golang.org/protobuf ersetzt das veraltete Paket github.com/golang/protobuf und dessen jsonpb Paket.
  • Die Option EmitDefaults stellt sicher, dass leere Felder im JSON enthalten sind Ausgabe.

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage