Unmarshaling von JSON mit unterschiedlichen Werttypen in Go
In Go beinhaltet das JSON-Unmarshaling typischerweise die Zuordnung von JSON-Daten zu einer entsprechenden Struktur. Allerdings treten Schwierigkeiten auf, wenn die Datenstruktur variieren kann und der Wert eines Schlüssels als Array von Objekten oder Zeichenfolgen dargestellt wird.
Problem:
Eine API liefert inkonsistente Datenstrukturen, was zur Folge hat in möglichen Wertvariationen für einen Schlüssel: Inline-Objekte oder Verweise auf Objekte (/obj1/is/at/this/path).
Lösung:
Um mit dieser Variabilität umzugehen, sollten Sie Folgendes in Betracht ziehen die folgenden Techniken:
1. Unmarshalieren zu einem Schnittstellentyp:
Unmarshalieren der JSON-Daten zu einer Struktur, die ein Feld mit dem Typ []interface{} enthält. Dadurch können sowohl Zeichenfolgen (als Zeichenfolgen dekodiert) als auch Objekte (als Map[string]interface{} dekodiert) im Array gespeichert werden.
Codebeispiel:
type Data struct { MyKey []interface{} `json:"mykey"` }
2. Typwechsel zur Unterscheidung:
Sobald die Daten entmarshaled sind, verwenden Sie einen Typwechsel, um zwischen Zeichenfolgen und Objekten zu unterscheiden.
Codebeispiel:
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) } }
Zusätzliche Hinweise:
Das obige ist der detaillierte Inhalt vonWie gehe ich mit unterschiedlichen JSON-Werttypen beim Unmarshaling in Go um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!