Heim >Backend-Entwicklung >Golang >Wie glätte ich verschachtelte JSON-Strukturen in Go mithilfe benutzerdefinierter UnmarshalJSON-Funktionen?

Wie glätte ich verschachtelte JSON-Strukturen in Go mithilfe benutzerdefinierter UnmarshalJSON-Funktionen?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 08:04:02662Durchsuche

How to Flatten Nested JSON Structures in Go Using Custom UnmarshalJSON Functions?

Verschachteltes JSON reduzieren

Das Navigieren in komplexen JSON-Strukturen mit mehreren Verschachtelungsebenen kann in Go eine Herausforderung sein. Wenn es notwendig wird, diese verschachtelten Strukturen in ein schlankeres Format zu reduzieren, sind häufig benutzerdefinierte Lösungen erforderlich.

Im dargestellten Szenario besteht die Aufgabe darin, eine JSON-Antwort, die einen verschachtelten Social-Typ enthält, mit einem weiteren verschachtelten Typ zu verflachen Facebook-Typ. Das Ziel besteht darin, den Zwischentyp „Facebook“ zu eliminieren und seine Eigenschaften auf den Typ „Sozial“ zu reduzieren.

Benutzerdefinierte UnmarshalJSON-Funktionen

Um dies zu erreichen, können wir die Leistungsfähigkeit der UnmarshalJSON-Funktion von Go nutzen, die Ihnen dies ermöglicht um anzupassen, wie JSON in eine Struktur dekodiert wird. So implementieren Sie dies zum Reduzieren von verschachteltem JSON:

<code class="go">type Social struct {
    // ... existing properties ...
    FacebookLikes       uint32 `json:"-"`
    FacebookShares      uint32 `json:"-"`
    FacebookComments    uint32 `json:"-"`
    FacebookTotal       uint32 `json:"-"`
}

func (s *Social) UnmarshalJSON(data []byte) error {
    m := make(map[string]interface{})
    if err := json.Unmarshal(data, &m); err != nil {
        return err
    }

    m = Flatten(m)

    // Extract nested Facebook properties
    if fbMap, ok := m["Facebook"].(map[string]interface{}); ok {
        s.FacebookLikes = fbMap["FacebookLikes"].(uint32)
        s.FacebookShares = fbMap["FacebookShares"].(uint32)
        s.FacebookComments = fbMap["FacebookComments"].(uint32)
        s.FacebookTotal = fbMap["FacebookTotal"].(uint32)
    }

    return nil
}</code>

Flatten-Hilfsfunktion

Die Flatten-Hilfsfunktion ist dafür verantwortlich, verschachtelte Karten zu entfernen und sie durch durch Punkte getrennte Schlüssel zu ersetzen:

<code class="go">func Flatten(m map[string]interface{}) map[string]interface{} {
    o := make(map[string]interface{})
    for k, v := range m {
        switch child := v.(type) {
        case map[string]interface{}:
            nm := Flatten(child)
            for nk, nv := range nm {
                o[k+"."+nk] = nv
            }
        default:
            o[k] = v
        }
    }
    return o
}</code>

Mit diesem Ansatz wird der verschachtelte Facebook-Typ entfernt und seine Eigenschaften werden auf den Social-Typ reduziert, was zu einer präziseren und besser verwaltbaren Datenstruktur führt.

Das obige ist der detaillierte Inhalt vonWie glätte ich verschachtelte JSON-Strukturen in Go mithilfe benutzerdefinierter UnmarshalJSON-Funktionen?. 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