Maison > développement back-end > Golang > Comment omettre les structures imbriquées vides dans « json.Marshal » de Go ?

Comment omettre les structures imbriquées vides dans « json.Marshal » de Go ?

DDD
Libérer: 2024-12-09 07:49:05
original
1035 Les gens l'ont consulté

How to Omit Empty Nested Structs in Go's `json.Marshal`?

golang json marshal : comment omettre une structure imbriquée vide

Dans des scénarios d'encodage JSON complexes, on peut rencontrer des situations où les structures vides imbriquées sont également codées alors qu'elles doivent être omises pour des raisons d'espace et d'efficacité. Par exemple, considérons l'extrait de code suivant :

type ColorGroup struct {
    ID     int `json:",omitempty"`
    Name   string
    Colors []string
}
type Total struct {
    A ColorGroup `json:",omitempty"`
    B string     `json:",omitempty"`
}
Copier après la connexion

Lorsque json.Marshal est utilisé sur une instance de Total avec un champ A vide, il apparaît toujours dans le JSON de sortie :

group := Total{
    A: ColorGroup{},  // An empty ColorGroup instance
}

json.Marshal(group) // Output: {"A":{"Name":"","Colors":null},"B":null}
Copier après la connexion

Le résultat souhaité est d'omettre complètement le champ A :

{"B":null}
Copier après la connexion

Solution : Utiliser le pointeur Types

La clé pour résoudre ce problème réside dans l'utilisation de pointeurs. Si le champ A dans Total est déclaré comme pointeur, il sera automatiquement défini sur nul lorsqu'il n'est pas explicitement attribué, résolvant le problème de l'encodage de structure vide :

type ColorGroup struct {
    ID     int `json:",omitempty"`
    Name   string
    Colors []string
}
type Total struct {
    A *ColorGroup `json:",omitempty"`  // Using a pointer to ColorGroup
    B string     `json:",omitempty"`
}
Copier après la connexion

Avec cette modification, la sortie json.Marshal omettra désormais correctement le champ A vide :

group := Total{
    B: "abc",  // Assigning a value to the B field
}

json.Marshal(group) // Output: {"B":"abc"}
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal