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; }
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"` }
La solution
Pour supprimer la balise omitempty des structures générées, il y a existe deux approches possibles :
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
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 }
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!