Heim > Backend-Entwicklung > Golang > Wie gehe ich mit Variablen-Array-Rückgaben um, wenn ich JSON in Go entmarshalle?

Wie gehe ich mit Variablen-Array-Rückgaben um, wenn ich JSON in Go entmarshalle?

Susan Sarandon
Freigeben: 2024-12-12 12:49:10
Original
263 Leute haben es durchsucht

How to Handle Variable Array Returns When Unmarshalling JSON in Go?

Unmarshalling von JSON mit variabler Array-Rückgabe

Beim Abrufen von JSON aus externen Quellen kann die Struktur der Antwort variieren, was das Unmarshalling schwierig macht in eine feste Go-Struktur. Dies wird besonders deutlich, wenn der JSON ein Array oder ein einzelnes Objekt für dieselbe Eigenschaft enthalten kann.

Im bereitgestellten Beispiel enthält die JSON-Antwort eine Eigenschaft namens „gwrcmd“, die entweder ein Array von Objekten oder sein kann ein singuläres Objekt. Um dieses Problem zu beheben, besteht ein Ansatz darin, eine zweite Struktur mit denselben Feldern wie das Original, aber mit einem Slice für die Eigenschaft „gwrcmd“ zu erstellen. Eine flexiblere Lösung kann jedoch mit json.RawMessage erreicht werden.

json.RawMessage ermöglicht das Unmarshalling unbekannter Typen in einen rohen JSON-String. Diese Funktion kann verwendet werden, um einen Blick in den JSON-Code zu werfen und die geeignete Methode zum Unmarshalieren in den entsprechenden Go-Typ zu bestimmen.

Betrachten Sie das folgende vereinfachte Beispiel:

type Response struct {
    RawAWrapper struct {
        RawA json.RawMessage `json:"a"`
    }
    A  A   `json:"-"`
    As []A `json:"-"`
}

type A struct {
    B string
}

func (r *Response) UnmarshalJSON(b []byte) error {
    if err := json.Unmarshal(b, &r.RawAWrapper); err != nil {
        return err
    }
    if r.RawAWrapper.RawA[0] == '[' {
        return json.Unmarshal(r.RawAWrapper.RawA, &r.As)
    }
    return json.Unmarshal(r.RawAWrapper.RawA, &r.A)
}
Nach dem Login kopieren

In diesem Beispiel ist die json.RawMessage-Feld RawA erfasst den JSON-Wert der Eigenschaft „a“. Anhand des ersten Bytes des Roh-JSON können wir bestimmen, ob der Wert ein Array ([]) oder ein Objekt („{“) ist. Diese Informationen werden dann verwendet, um den Wert entweder in die A-Struktur (für Objekte) oder das As-Slice (für Arrays) zu entmarshalieren.

Dieser Ansatz bietet eine flexiblere und robustere Möglichkeit, JSON-Antworten mit variablen Strukturen zu verarbeiten. Es macht doppelte Strukturen überflüssig und ermöglicht ein dynamisches Unmarshalling basierend auf dem JSON-Inhalt.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit Variablen-Array-Rückgaben um, wenn ich JSON in Go entmarshalle?. 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