Heim >Backend-Entwicklung >Golang >Warum verursacht das Unmarshaling eines Arrays in eine Go-Struktur durch JSON eine Panik?

Warum verursacht das Unmarshaling eines Arrays in eine Go-Struktur durch JSON eine Panik?

Linda Hamilton
Linda HamiltonOriginal
2024-12-16 10:49:10780Durchsuche

Why Does JSON Unmarshaling an Array into a Go Struct Cause a Panic?

Panic: JSON Unmarshal Array into Go Struct

Beim Versuch, Daten aus einer JSON-API zu analysieren, ist der Fehler aufgetreten: „Panic: json: Das Array kann nicht in einen Go-Wert vom Typ „main.Structure“ entmarshaliert werden.“ Das Problem tritt auf, wenn ein JSON-Array in eine Go-Struktur entmarshallt wird.

Ihr Code:

type Structure struct {
        stuff []interface{}
}

func main() {
        // ...

        decoded := &Structure{}
        err = json.Unmarshal(body, decoded)
}

Erwartetes Ergebnis:

Sie haben erwartet, dass der Code eine Liste von Schnittstellen zurückgibt Objekte.

Tatsächliches Ergebnis:

Stattdessen haben Sie eine Fehlermeldung erhalten, die darauf hinweist, dass das JSON-Array nicht in den Structure Go-Wert entmarshallt werden konnte.

Lösung:

Um dieses Problem zu lösen, ziehen Sie zwei in Betracht Ansätze:

  1. Unmarshal to a Slice:

    Ersetzen Sie die Zeile:

    decoded := &Structure{}

    durch:

    var data []interface{}

    Dadurch wird das JSON-Array in einen Teil davon entmarshmiert Schnittstellen.

  2. Unmarshalieren in ein Segment von Strukturen:

    Erstellen Sie spezifische Strukturen für die Antwortdatenstruktur. Zum Beispiel:

    type Tick struct {
      ID string
      Name string
      Symbol string
      Rank string
      Price_USD string
    }

    Dann führen Sie das Unmarshalieren zu einem Teil dieser Strukturen durch:

    var data []Tick
    err = json.Unmarshal(body, &data)

Das obige ist der detaillierte Inhalt vonWarum verursacht das Unmarshaling eines Arrays in eine Go-Struktur durch JSON eine Panik?. 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