Heim  >  Artikel  >  Backend-Entwicklung  >  Wie greife ich in Go auf verschachtelte JSON-Arrays zu?

Wie greife ich in Go auf verschachtelte JSON-Arrays zu?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 14:54:30900Durchsuche

How Do I Access Nested JSON Arrays in Go?

Zugriff auf verschachtelte JSON-Arrays in Go

In Go treten beim Zugriff auf verschachtelte JSON-Arrays nach dem Unmarshalling Herausforderungen auf. Beim Versuch, ein Element aus dem Array „objects“ in einer Antwort abzurufen, kann der Fehler „Typschnittstelle {} unterstützt keine Indizierung“ auftreten.

Verstehen des Problems

Standardmäßig stellen JSON-Module in Go Arrays als []Interface{}-Slices und Wörterbücher als Map[string]Interface{}-Maps dar. Daher schlägt beim Dekodieren in eine Interface{}-Variable der direkte Zugriff auf verschachtelte Elemente mithilfe der Indizierung fehl.

Lösung: Typ Assertion

Ein Ansatz zur Behebung dieses Problems ist durch Typzusicherung. Dazu gehört die Konvertierung der Variablen interface{} in den zugrunde liegenden konkreten Typ. So extrahieren Sie beispielsweise die ITEM_ID aus dem ersten Objekt im Array „objects“:

<code class="go">objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])</code>

Typzusicherung mit Fehlerprüfung

Beim Durchführen von Typzusicherungen ist dies der Fall Es ist wichtig, eine Fehlerprüfung zu integrieren, um fehlerhafte Konvertierungen zu bewältigen. Beispiel:

<code class="go">objects, ok := result["objects"].([]interface{})
if !ok {
    // Handle type conversion error
}</code>

Dekodierung in eine Struktur

Eine alternative Lösung, die für JSON mit einem bekannten Format empfohlen wird, besteht darin, direkt in eine benutzerdefinierte Struktur zu dekodieren. Definieren Sie eine Struktur, die der JSON-Struktur entspricht, und dekodieren Sie sie:

<code class="go">type Result struct {
    Query string
    Count int
    Objects []struct {
        ItemId      string
        ProdClassId string
        Available   int
    }
}</code>

Dadurch können Sie direkt auf Daten zugreifen, sodass keine Typzusicherungen erforderlich sind:

<code class="go">var result Result
json.Unmarshal(payload, &result)
fmt.Println(result.Objects[0].ItemId)</code>

Das obige ist der detaillierte Inhalt vonWie greife ich in Go auf verschachtelte JSON-Arrays zu?. 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