Heim > Backend-Entwicklung > Golang > Wie kann der Fehler „Marshalieren nicht möglich...' in Golang behoben werden?

Wie kann der Fehler „Marshalieren nicht möglich...' in Golang behoben werden?

WBOY
Freigeben: 2023-06-24 20:01:59
Original
4347 Leute haben es durchsucht

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
}
Nach dem Login kopieren

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"
}
Nach dem Login kopieren

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"`
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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"`
}
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Verwandte Etiketten:
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage