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
Linda Hamiltonoriginal
2024-11-30 13:04:11870parcourir

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

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
}

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!

Déclaration:
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