首頁  >  文章  >  後端開發  >  如何在 Go 中存取巢狀 JSON 陣列?

如何在 Go 中存取巢狀 JSON 陣列?

Susan Sarandon
Susan Sarandon原創
2024-11-04 14:54:30898瀏覽

How Do I Access Nested JSON Arrays in Go?

在 Go 中存取巢狀 JSON 陣列

在 Go 中,解組後存取巢狀 JSON 陣列時會出現挑戰。當嘗試從回應中的「objects」陣列中擷取元素時,可能會遇到錯誤「type interface {} does not support indexing」。

理解問題

預設情況下,Go 中的JSON 模組將陣列表示為[]interface{} 切片,將字典表示為map[string]interface{ } 映射。因此,當解碼為interface{}變數時,直接使用索引存取嵌套元素將會失敗。

解決方案:類型斷言

解決此問題的一種方法是透過類型斷言。這涉及將 interface{} 變數轉換為底層具體類型。例如,要從「objects」陣列中的第一個物件中提取ITEM_ID:

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

帶錯誤檢查的類型斷言

執行類型斷言時,它是合併錯誤檢查以處理不正確的轉換至關重要。範例:

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

解碼為結構

對於已知格式的 JSON 建議的替代解決方案是直接解碼為自訂結構。定義一個結構體來匹配 JSON 結構,並解碼為它:

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

這允許您直接存取數據,無需類型斷言:

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

以上是如何在 Go 中存取巢狀 JSON 陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn