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

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