Heim > Backend-Entwicklung > Golang > Wie kann ich JSON mit dynamischen Array-Strukturen in Go effizient entmarshalieren?

Wie kann ich JSON mit dynamischen Array-Strukturen in Go effizient entmarshalieren?

Linda Hamilton
Freigeben: 2024-12-21 14:43:11
Original
635 Leute haben es durchsucht

How to Efficiently Unmarshal JSON with Dynamic Array Structures in Go?

Unmarshalling von JSON mit dynamischer Array-Struktur

Beim Abrufen von JSON-Daten aus Quellen Dritter kann die Datenstruktur variieren und manchmal Arrays und enthalten manchmal nicht. Dies kann bei der Verwendung der json.Unmarshal-Funktion von Go zu Herausforderungen führen, da sie erwartet, dass eine bestimmte Struktur mit der JSON-Struktur übereinstimmt.

Ein gängiger Ansatz zur Handhabung dieses Problems besteht darin, eine sekundäre Struktur mit einem Slice zu erstellen, wie zum Beispiel:

type ResponseWithSlice struct {
    Gwrcmds struct {
        Gwrcmd []struct { // Nested struct now a slice
            Gcmd  string
            Gdata struct {
                Gip struct {
                    Version string
                }
            }
        }
    }
}
Nach dem Login kopieren

Das funktioniert, aber es erfordert das Duplizieren der Struktur, was umständlich sein kann.

Eine vielseitigere Lösung beinhaltet mit json.RawMessage:

type Response struct {
    RawGwrcmd json.RawMessage `json:"gwrcmds"`
}
Nach dem Login kopieren

Bei diesem Ansatz wird das gwrcmds-Feld als rohe JSON-Nachricht gespeichert, sodass wir einen Blick darauf werfen und es entsprechend entmarshamnieren können:

func (r *Response) UnmarshalJSON(b []byte) error {
    if err := json.Unmarshal(b, &r.RawGwrcmd); err != nil {
        return err
    }
    if r.RawGwrcmd[0] == '[' { // Check if it's an array
        return json.Unmarshal(r.RawGwrcmd, &r.Gwrcmds.Gwrcmd)
    }
    return json.Unmarshal(r.RawGwrcmd, &r.Gwrcmds.Gwrcmd) // Otherwise, treat it as a single struct
}
Nach dem Login kopieren

Dies Mit der Methode können wir sowohl Array- als auch Nicht-Array-Strukturen verarbeiten, ohne dass zusätzliche Strukturen erforderlich sind.

Das obige ist der detaillierte Inhalt vonWie kann ich JSON mit dynamischen Array-Strukturen in Go effizient entmarshalieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage