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

Comment supprimer la balise « omitempty » du JSON généré par Protobuf ?

Patricia Arquette
Libérer: 2024-11-30 13:25:13
original
980 Les gens l'ont consulté

How to Remove the `omitempty` Tag from Protobuf-Generated JSON?

Suppression de la balise Omitempty des balises JSON générées par le tampon de protocole

Introduction

Les tampons de protocole (Protobuf) sont un langage -Mécanisme extensible neutre et indépendant de la plate-forme pour la sérialisation des données structurées. Lorsque vous travaillez avec Protobuf, il peut être nécessaire de supprimer la balise omitempty des balises JSON générées dans les fichiers *.pb.go. Cet article explique comment y parvenir en utilisant différentes méthodes.

Option grpc-gateway

Si vous utilisez grpc-gateway, l'inclusion de l'option suivante lors de la création de ServeMux garantira que les valeurs par défaut sont présentes lors du marshaling JSON :

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

protobuf Package

En dehors de grpc-gateway, le package google.golang.org/protobuf/encoding/protojson (remplaçant désormais le obsolète github.com/golang/protobuf/jsonpb) peut être utilisé pour marshaler le protocole Messages tampons. En utilisant la structure Marshaler avec EmitDefaults: true défini, les valeurs par défaut seront incluses dans la sortie JSON :

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) // Error handling omitted
}
Copier après la connexion

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