Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich verschachtelte JSON-Daten mithilfe benutzerdefinierter UnmarshalJSON-Funktionen in Go in eine einstufige Struktur reduzieren?

Wie kann ich verschachtelte JSON-Daten mithilfe benutzerdefinierter UnmarshalJSON-Funktionen in Go in eine einstufige Struktur reduzieren?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 14:49:02288Durchsuche

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

Verschachteltes JSON reduzieren

Das Reduzieren verschachtelter JSON-Daten in eine einstufige Struktur ist eine häufige Aufgabe in der Datenverarbeitung. So können Sie dies in Go mithilfe einer benutzerdefinierten UnmarshalJSON-Funktion erreichen:

UnmarshalJSON-Funktion

Benutzerdefinierte UnmarshalJSON-Funktionen ermöglichen Go-Strukturen das Unmarshalling von JSON-Daten. Hier ist Ihre aktualisierte Social-Struktur mit der UnmarshalJSON-Implementierung:

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

Verwendung

Mit der aktualisierten Social-Struktur können Sie jetzt Ihr JSON-Dokument entmarshalieren und reduzieren:

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

Dieser Code gibt Ihre gewünschte abgeflachte JSON-Struktur aus, wobei Facebook-Felder in die soziale Struktur der obersten Ebene eingefügt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich verschachtelte JSON-Daten mithilfe benutzerdefinierter UnmarshalJSON-Funktionen in Go in eine einstufige Struktur reduzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn