Maison >développement back-end >Golang >Comment Go peut-il gérer efficacement le décodage JSON partiel et les mises à jour ?

Comment Go peut-il gérer efficacement le décodage JSON partiel et les mises à jour ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-27 09:06:14513parcourir

How Can Go Handle Partial JSON Decoding and Updates Efficiently?

Gestion du décodage JSON partiel et des mises à jour dans Go

Dans les cas où la structure d'un objet JSON est dynamique, la désorganisation JSON traditionnelle peut conduire à perte de données due à la troncature des champs. Pour résoudre ce problème, envisagez une solution combinant une structure régulière avec json.RawMessage, qui permet des mises à jour sélectives tout en préservant les informations inconnues.

La structure Color illustre cette approche :

type Color struct {
    Space string
    raw   map[string]json.RawMessage
}

Pendant JSON lors du démarshalling, la méthode UnmarshalJSON lit toutes les données au format brut et récupère le champ souhaité (par exemple, Espace) à partir du format brut s'il est existe :

func (c *Color) UnmarshalJSON(bytes []byte) error {
    if err := json.Unmarshal(bytes, &c.raw); err != nil {
        return err
    }
    // ...
    return nil
}

Pour le marshalling JSON, la méthode MarshalJSON remet le champ souhaité en brut, garantissant que le champ mis à jour est inclus dans la sortie :

func (c *Color) MarshalJSON() ([]byte, error) {
    // ...
    return json.Marshal(c.raw)
}

Cette approche permet mises à jour sélectives des champs tout en préservant le reste des données JSON, y compris les structures inconnues ou dynamiques.

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