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

Patricia Arquette
Freigeben: 2024-11-24 00:54:09
Original
240 Leute haben es durchsucht

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

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

type Data struct {
    MyKey []interface{} `json:"mykey"`
}
Nach dem Login kopieren

Wenn JSON mit Zeichenfolgenwerten angetroffen wird, wie zum Beispiel:

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

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

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!

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