Heim >Backend-Entwicklung >Golang >Wie kann Go beim Unmarshaling mit dynamischen JSON-Feldtypen umgehen?

Wie kann Go beim Unmarshaling mit dynamischen JSON-Feldtypen umgehen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-24 00:54:09303Durchsuche

How Can Go Handle Dynamic JSON Field Types During Unmarshaling?

Umgang mit dynamischen JSON-Feldtypen in Go

Beim Unmarshaling von JSON in Go in eine Struktur kann es zu Inkonsistenzen im Werttyp von a kommen spezifischer Schlüssel für alle API-Anfragen. Diese Herausforderung entsteht, wenn der Server unterschiedliche Objektstrukturen oder String-Referenzen für denselben Schlüssel sendet. Dies kann ein Problem darstellen, da Go eine feste Struktur für das Unmarshaling benötigt.

Um dieses Problem zu lösen, kann ein typdynamischer Ansatz unter Verwendung eines Schnittstellentyps verwendet werden. Betrachten Sie die folgenden JSON-Daten:

{
  "mykey": [
    {obj1}, 
    {obj2}
  ]
}

Um diese dynamische Natur zu erfassen, können wir eine Struktur wie folgt definieren:

type Data struct {
    MyKey []interface{} `json:"mykey"`
}

Wenn JSON mit Zeichenfolgenwerten angetroffen wird, wie zum Beispiel:

{
  "mykey": [
    "/obj1/is/at/this/path", 
    "/obj2/is/at/this/other/path"
  ]
}

Die MyKey-Slice-Elemente werden als Strings dekodiert. Bei Objekten werden sie als Map[string]interface{}-Werte dekodiert. Diese Unterscheidung kann mithilfe eines Typschalters vorgenommen werden:

for i, v := range data.MyKey {
    switch x := v.(type) {
    case string:
        fmt.Println("Got a string: ", x)
    case map[string]interface{}:
        fmt.Printf("Got an object: %#v\n", x)
    }
}

Durch das Unmarshaling des JSON in einen Schnittstellentyp und die Verwendung von Typschaltern können Go-Entwickler dynamische Feldtypen verarbeiten und die Daten unabhängig von der bereitgestellten Struktur entsprechend analysieren vom Server.

Das obige ist der detaillierte Inhalt vonWie kann Go beim Unmarshaling mit dynamischen JSON-Feldtypen umgehen?. 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