Maison > développement back-end > Golang > Comment puis-je décoder et mettre à jour partiellement JSON dans Go tout en préservant les champs inconnus ?

Comment puis-je décoder et mettre à jour partiellement JSON dans Go tout en préservant les champs inconnus ?

Patricia Arquette
Libérer: 2024-12-31 10:28:10
original
536 Les gens l'ont consulté

How Can I Partially Decode and Update JSON in Go While Preserving Unknown Fields?

Décodage partiel et mise à jour de JSON dans Go

Lorsque vous travaillez avec des objets JSON, il peut être nécessaire de décoder uniquement des valeurs spécifiques tout en préservant les valeurs inconnues parties de l'objet. Le package encoding/json dans Go a cependant tendance à tronquer les champs non présents dans la structure, entraînant une perte de données lors du réencodage.

Une solution

Pour pour surmonter ce problème, une combinaison d'une structure simple et de json.RawMessage peut être utilisée pour préserver les champs inconnus.

type Color struct {
    Space string
    raw   map[string]json.RawMessage
}
Copier après la connexion

Dans cette structure, le champ brut stocke l'intégralité de l'objet JSON sous forme de RawMessage. Lors du décodage, la méthode UnmarshalJSON lit le champ brut pour extraire des valeurs spécifiques dans les champs définis de la structure.

func (c *Color) UnmarshalJSON(bytes []byte) error {
    if err := json.Unmarshal(bytes, &c.raw); err != nil {
        return err
    }
    if space, ok := c.raw["Space"]; ok {
        if err := json.Unmarshal(space, &c.Space); err != nil {
            return err
        }
    }
    return nil
}
Copier après la connexion

De même, lors de l'encodage, la méthode MarshalJSON sérialise le champ Espace et met à jour la carte brute avec les octets codés. .

func (c *Color) MarshalJSON() ([]byte, error) {
    bytes, err := json.Marshal(c.Space)
    if err != nil {
        return nil, err
    }
    c.raw["Space"] = json.RawMessage(bytes)
    return json.Marshal(c.raw)
}
Copier après la connexion

Cette approche permet un décodage partiel et une mise à jour de champs spécifiques, tout en préservant les parties inconnues du Objet 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!

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