在 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中文网其他相关文章!