Heim >Backend-Entwicklung >Golang >Wie kann ich JSON-Unmarshaling mit variablen Datentypen (Objekten oder Strings) in Go handhaben?

Wie kann ich JSON-Unmarshaling mit variablen Datentypen (Objekten oder Strings) in Go handhaben?

Barbara Streisand
Barbara StreisandOriginal
2024-12-03 00:51:15234Durchsuche

How Can I Handle JSON Unmarshaling with Variable Data Types (Objects or Strings) in Go?

Umgang mit JSON-Unmarshaling mit Arrays von Objekten oder Strings in Go

Beim Unmarshaling von JSON in Strukturen in Go stoßen Sie möglicherweise auf Felder, die enthalten können unterschiedliche Typen (Objekte oder Strings) von Anfrage zu Anfrage. Beispielsweise könnte ein Feld mit dem Namen „mykey“ manchmal Inline-Objekte enthalten und manchmal Verweise auf Objekte an bestimmten Pfaden.

Go-Idiomatische Lösung

Eine idiomatische Go Der Ansatz zur Bewältigung dieser Situation besteht darin, eine Struktur mit einem Feld zu definieren, dessen Typ ein Segment von Schnittstellen{}-Werten ist. Dadurch kann das Feld sowohl Objekte als auch Zeichenfolgen enthalten, da Go sie basierend auf dem eingehenden JSON automatisch in den entsprechenden Typ dekodiert. Der folgende Code demonstriert dies:

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

Typprüfung

Nach dem Unmarshaling des JSON können Sie einen Typschalter verwenden, um zwischen Objekten und Zeichenfolgen im Slice zu unterscheiden:

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)
    }
}

Dadurch können Sie beide Arten von Werten strukturiert und effizient handhaben Art und Weise.

Beispiel

Betrachten Sie den folgenden JSON:

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

Nach dem Unmarshaling dieses JSON in eine Datenstruktur enthält das MyKey-Slice zwei Elemente, jedes vom Typ map[string]interface{}.

Alternativ, wenn das JSON enthalten ist Verweise auf Objekte:

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

Das MyKey-Slice enthält zwei Elemente, jedes vom Typ string.

Das obige ist der detaillierte Inhalt vonWie kann ich JSON-Unmarshaling mit variablen Datentypen (Objekten oder Strings) in Go handhaben?. 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