首頁 > 後端開發 > Golang > 主體

解組後如何存取 Golang 中的巢狀 JSON 陣列?

Mary-Kate Olsen
發布: 2024-11-04 18:54:02
原創
348 人瀏覽過

How to Access Nested JSON Arrays in Golang After Unmarshalling?

解組後在Golang 中存取巢狀JSON 陣列

在Golang 中處理JSON 回應時,您可能會在存取巢狀JSON 元素時遇到困難大批。當嘗試存取「物件」數組中的特定元素時,可能會發生這種情況,從而導致類似「類型介面 {} 不支援索引」的錯誤。

錯誤原因

出現這個錯誤是因為Go中的介面變數不支援索引。當您將 JSON 負載解碼為介面變數時,JSON 模組會將陣列表示為 []interface{} 切片,將字典表示為 map[string]interface{} 映射。

解決方案 1:使用類型斷言

要存取「objects」陣列中的特定元素,可以使用類型斷言將介面變數轉換為具體類型。然而,這種方法需要錯誤檢查來處理類型斷言失敗的情況。

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

解決方案2:解碼為結構

如果JSON 負載有已知格式,更強大的解決方案是將其直接解碼為自訂結構。這允許您定義預期的結構,消除對類型斷言和錯誤處理的需要。

<code class="go">type Result struct {
    Query   string `json:"query"`
    Count   int    `json:"count"`
    Objects []struct {
        ItemId      string `json:"ITEM_ID"`
        ProdClassId string `json:"PROD_CLASS_ID"`
        Available   int    `json:"AVAILABLE"`
    } `json:"objects"`
}

var result Result
if err := json.Unmarshal(payload, &result); err != nil {
    panic(err)
}
fmt.Println(result.Objects[0].ItemId)</code>
登入後複製

透過根據特定用例選擇適當的解決方案,您可以在之後無縫存取 Golang 中的巢狀 JSON 陣列正在解組。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!