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

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

Linda Hamilton
Linda HamiltonOriginal
2024-11-30 13:04:11890Durchsuche

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}))

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
}

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!

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