Golang JSON:透過解組處理嵌套數組
在Go 中,解組後處理嵌套JSON 數組時,理解錯誤至關重要「類型介面{}不支援索引。」當您嘗試存取儲存在interface{}變數中的JSON陣列中的元素時,會發生此錯誤。
要解決此問題,您需要利用類型斷言將interface{}變數轉換為底層陣列類型。
Interface{} JSON 模組中的表示形式
JSON 模組將陣列表示為[]interface{} 切片,字典作為map[string]interface{}在解碼為interface{}變數時映射。
使用型別斷言存取巢狀元素
無需錯誤檢查,您可以導覽使用型別斷言的JSON 陣列如下:
objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])
但是,需要注意的是,如果類型不匹配,這些類型斷言可能會出現恐慌。為了避免這個問題,您可以使用兩次返回形式並檢查錯誤:
objects, ok := result["objects"].([]interface{})
if !ok {
// Handle error here
}
解碼為結構以改善存取
如果 JSON 資料遵循一致的格式,更有效的解決方案是將其解碼為結構化類型。例如,根據所提供的數據:
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"`
}
透過解碼為該結構,您可以使用 result.Objects[0].ItemId 直接存取項目 ID。這種方法消除了對類型斷言的需要,並提供了一種用於存取巢狀元素的類型安全方法。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3