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