Maison > développement back-end > Golang > Comment supprimer les balises « omitempty » du JSON généré par Protobuf ?

Comment supprimer les balises « omitempty » du JSON généré par Protobuf ?

Linda Hamilton
Libérer: 2024-11-30 13:04:11
original
794 Les gens l'ont consulté

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

Suppression des balises Omitempty du JSON généré par Protobuf

Lors de la génération de classes Protobuf à utiliser avec un proxy JSON, vous pouvez rencontrer les balises omitempty sur les structures générées. Ces balises suppriment les champs vides lors du marshaling JSON, ce qui peut être indésirable dans certains scénarios.

Pour supprimer les balises omitempty des structures générées :

Utilisation de grpc-gateway

Si vous utilisez grpc-gateway, vous pouvez désactiver le comportement d'omitempty en spécifiant l'option suivante lorsque créer votre servemux :

gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
Copier après la connexion

En dehors de grpc-gateway

Pour rassembler votre message Protobuf sans le comportement d'omitempty en dehors de grpc-gateway, utilisez google.golang Package .org/protobuf/encoding/protojson au lieu du package encoding/json standard package :

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
}
Copier après la connexion

Remarque :

  • Le package google.golang.org/protobuf remplace le obsolète github.com/golang/protobuf et son jsonpb package.
  • L'option EmitDefaults garantit que les champs vides sont inclus dans le JSON sortie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal