Maison > développement back-end > Golang > Comment supprimer les balises « omitempty » de JSON dans les structures de tampon de protocole ?

Comment supprimer les balises « omitempty » de JSON dans les structures de tampon de protocole ?

Mary-Kate Olsen
Libérer: 2024-12-14 16:45:11
original
994 Les gens l'ont consulté

How to Remove `omitempty` Tags from JSON in Protocol Buffer Structs?

Comment supprimer la balise Omitempty des balises JSON générées dans les structures de tampon de protocole

Dans certains cas d'utilisation, il peut être nécessaire de supprimer le Balise omitempty à partir des balises JSON générées pour les structures de tampon de protocole. Les tampons de protocole, en particulier lorsqu'ils sont utilisés avec gRPC, sont un outil puissant pour la sérialisation et le transfert de données. Cependant, l'inclusion de la balise omitempty peut conduire à l'omission de valeurs par défaut ou vides lors du marshaling JSON, ce qui peut ne pas être souhaitable.

Le problème

Lors de l'utilisation tampons de protocole avec un proxy JSON, la structure générée peut avoir des balises omitempty incluses dans les balises JSON, comme le montre l'exemple ci-dessous :

message Status {
  int32 code = 1;
  string message = 2;
}
Copier après la connexion

La structure générée résultante :

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

La solution

Pour supprimer la balise omitempty des structures générées, il y a existe deux approches possibles :

  1. Utiliser grpc-gateway : Si vous utilisez grpc-gateway, vous pouvez configurer le serveur mux avec l'option suivante :
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
Copier après la connexion
  1. Utilisation de google.golang.org /protobuf/encoding/protojson : Pour les applications en dehors de grpc-gateway, vous pouvez utiliser le google.golang.org/protobuf/encoding/protojson au lieu du encoding/json standard pour le marshaling. Ce package offre un contrôle plus fin sur le processus de marshaling, y compris la possibilité d'émettre des valeurs par défaut :
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
}
Copier après la connexion

En implémentant l'une de ces approches, vous pouvez supprimer efficacement les balises omitempty des balises JSON générées pour vos structures de tampon de protocole, garantissant que les valeurs par défaut ou vides sont incluses lors du marshaling JSON.

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