Maison > développement back-end > Golang > Comment puis-je aplatir les données JSON imbriquées dans une structure à un seul niveau à l'aide des fonctions UnmarshalJSON personnalisées dans Go ?

Comment puis-je aplatir les données JSON imbriquées dans une structure à un seul niveau à l'aide des fonctions UnmarshalJSON personnalisées dans Go ?

Susan Sarandon
Libérer: 2024-10-28 14:49:02
original
432 Les gens l'ont consulté

How can I flatten nested JSON data into a single level structure using custom UnmarshalJSON functions in Go?

Aplatissement du JSON imbriqué

L'aplatissement des données JSON imbriquées dans une structure à un seul niveau est une tâche courante dans le traitement des données. Voici comment y parvenir dans Go à l'aide d'une fonction UnmarshalJSON personnalisée :

Fonction UnmarshalJSON

Les fonctions UnmarshalJSON personnalisées permettent aux structures Go de gérer la désorganisation des données JSON. Voici votre structure sociale mise à jour avec l'implémentation UnmarshalJSON :

<code class="go">type Social struct {
    GooglePlusPlusOnes  uint32 `Social:"GooglePlusOne"`
    TwitterTweets       uint32 `json:"Twitter"`
    LinkedinShares      uint32 `json:"LinkedIn"`
    PinterestPins       uint32 `json:"Pinterest"`
    StumbleuponStumbles uint32 `json:"StumbleUpon"`
    DeliciousBookmarks  uint32 `json:"Delicious"`

    // Custom unmarshalling for the Facebook fields
    FacebookLikes       uint32 `json:"-"`
    FacebookShares      uint32 `json:"-"`
    FacebookComments    uint32 `json:"-"`
    FacebookTotal       uint32 `json:"-"`
}

// UnmarshalJSON implements the Unmarshaler interface for custom JSON unmarshalling
func (s *Social) UnmarshalJSON(data []byte) error {
    type FacebookAlias Facebook
    aux := &struct {
        Facebook FacebookAlias `json:"Facebook"`
    }{}

    if err := json.Unmarshal(data, aux); err != nil {
        return err
    }

    s.FacebookLikes = aux.Facebook.FacebookLikes
    s.FacebookShares = aux.Facebook.FacebookShares
    s.FacebookComments = aux.Facebook.FacebookComments
    s.FacebookTotal = aux.Facebook.FacebookTotal
    return nil
}</code>
Copier après la connexion

Utilisation

Avec la structure sociale mise à jour, vous pouvez désormais désorganiser votre document JSON et l'aplatir :

<code class="go">package main

import (
    "encoding/json"
    "fmt"
)

type Social struct {
    // ... (same as before)
}

func (s *Social) UnmarshalJSON(data []byte) error { // ... (same as before) }

func main() {
    var jsonBlob = []byte(`[
        {"StumbleUpon":0,"Reddit":0,"Facebook":{"commentsbox_count":4691,"click_count":0,"total_count":298686,"comment_count":38955,"like_count":82902,"share_count":176829},"Delicious":0,"GooglePlusOne":275234,"Buzz":0,"Twitter":7346788,"Diggs":0,"Pinterest":40982,"LinkedIn":0}
    ]`)

    var social []Social
    err := json.Unmarshal(jsonBlob, &social)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Printf("%+v", social)
}</code>
Copier après la connexion

Ce code affichera la structure JSON aplatie souhaitée, avec les champs Facebook fusionnés dans la structure sociale de niveau supérieur.

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