Während des Entwicklungsprozesses von Golang verwenden wir häufig JSON für den Datenaustausch und die Serialisierung. Wenn wir jedoch versuchen, JSON-Daten in eine Struktur zu deserialisieren, stoßen wir manchmal auf die Fehlermeldung „Unmarshalieren nicht möglich …“. Diese Fehlermeldung ist kryptisch, schwer verständlich und verwirrend. Dieser Artikel hilft Ihnen, die Ursache dieses Fehlers zu verstehen und bietet verschiedene Lösungen.
Lösung 1: Überprüfen Sie den Typ der Strukturelementvariablen
Der Fehler „Marshalieren nicht möglich...“ wird normalerweise durch eine Nichtübereinstimmung zwischen dem Wert in der JSON-Zeichenfolge und dem Typ der Strukturelementvariablen verursacht. Um diesen Fehler zu vermeiden, sollten wir beim Deklarieren der Struktur sicherstellen, dass der Typ jeder Mitgliedsvariablen mit dem entsprechenden Wert in JSON übereinstimmt.
Zum Beispiel definieren wir die folgende Struktur:
type Person struct { Name string Age int }
Wenn wir versuchen, den folgenden JSON in eine Struktur zu deserialisieren, stoßen wir auf den Fehler „Unmarshalieren nicht möglich...“:
{ "Name": "Lucy", "Age": "28" }
Dies liegt am Werttyp Age in JSON Es ist eine Zeichenfolge und kann nicht mit dem Age-Mitgliedsvariablentyp int in der Struktur übereinstimmen. Wir müssen den Typ von Age als String definieren, um JSON-Daten korrekt zu deserialisieren.
Lösung 2: Überprüfen Sie die Tags der Strukturmitgliedsvariablen
Wenn wir normalerweise ein Tag für das Feld in der Strukturmitgliedsvariablen definieren, leiten die Tag-Informationen die JSON-Daten während der Deserialisierung und werden zur Identifizierung des Namens und anderer verwendet Details zu jedem Feld. Wenn daher bei der Deserialisierung von JSON die Tag-Informationen nicht mit dem Attributnamen in den JSON-Daten übereinstimmen, kann dieser Fehler ebenfalls auftreten.
Zum Beispiel definieren wir die folgende Struktur:
type Person struct { Name string `json:"PersonName"` Age int `json:"PersonAge"` }
Wenn wir versuchen, den folgenden JSON in eine Struktur zu deserialisieren, werden wir auch auf den Fehler „Cannot unmarshal…“ stoßen:
{ "Name": "Lucy", "Age": 28 }
Das liegt daran, dass wir ihn übergeben die Struktur Die beiden Felder Name und Alter definieren die Beschriftung, aber die in der Beschriftung definierten Feldnamen stimmen nicht mit den Attributnamen in den JSON-Daten überein. Daher müssen wir den Attributnamen in den JSON-Daten in den in der Struktur definierten Tag-Namen ändern, um ihn korrekt zu deserialisieren.
Lösung 3: Golangs eigenes JSON-Paket für Anmerkungen verwenden
Eine andere Methode besteht darin, Golangs eigenes JSON-Paket zu verwenden, um „cannot unmarshal…“-Fehler durch Anmerkungen zu verhindern. Bei dieser Methode müssen wir beim Definieren der Struktur jedem Feld JSON-Tags hinzufügen, wie unten gezeigt:
type Person struct { Name string `json:"name"` Age int `json:"age"` }
Beim Deserialisieren von JSON müssen wir die Methode json.Unmarshal im Code verwenden und die JSON-Daten als Eingabe verwenden. Auf diese Weise können JSON-Daten korrekt deserialisiert werden, zum Beispiel:
p := &Person{} jsonData := []byte(`{"name":"John","age":18}`) err := json.Unmarshal(jsonData, p) if err != nil { fmt.Println("Unmarshal error: ", err) } fmt.Printf("Name: %s, Age: %d", p.Name, p.Age)
Zusammenfassung
In den meisten Fällen ist der Fehler „Unmarshaling nicht möglich...“ auf eine Nichtübereinstimmung zwischen dem Typ in den JSON-Daten und dem Typ von zurückzuführen die Strukturmitgliedsvariable oder Dies wird durch die Nichtübereinstimmung zwischen den Tag-Informationen und den Attributnamen in den JSON-Daten verursacht. Durch sorgfältige Prüfung dieser Probleme können wir diesen Fehler vermeiden. Wenn Sie diesen Fehler besser beheben möchten, verwenden Sie bitte Golangs eigenes JSON-Paket für die Annotationsverwaltung.
Das obige ist der detaillierte Inhalt vonWie kann der Fehler „Marshalieren nicht möglich...' in Golang behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!