Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehe ich mit unterschiedlichen JSON-Werttypen beim Unmarshaling in Go um?

Wie gehe ich mit unterschiedlichen JSON-Werttypen beim Unmarshaling in Go um?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-18 21:07:03705Durchsuche

How to Handle Varying JSON Value Types When Unmarshaling in Go?

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:

  • Sie können die Objekte nach Bedarf weiter verarbeiten, indem Sie auf die zugrunde liegende Map[string]interface{}-Struktur zugreifen.
  • Dieser Ansatz bietet Flexibilität bei der Handhabung potenzieller zukünftiger Änderungen an der Datenstruktur, ohne dass eine harte Codierung oder Reflexion erforderlich ist.

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!

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