我想检索所有ID以及索引值。
{
"results": [
{
"ID": "3b72"
},
{
"ID": "d953b1"
},
{
"ID": "8eac"
},
{
"ID": "00b4c"
},
{
"ID": "22360"
}
],
"index": 10
}
我尝试了以下操作,但没有成功(我在golang中是一个新手):
var result map[string]interface{}
json.Unmarshal([]byte(body), &result)
ids:= result["results"].(map[string]interface{})
for key, value := range ids{
fmt.Println(key, value.(string))
}
答案 0 :(得分:4)
根据您的json字符串,需要解决的问题很少。首先,result["results"]
属性必须强制转换为[]interface{}
,因为results
保存数组数据。
ids := result["results"].([]interface{})
然后,在ids
的每次迭代中,需要将变量value
(类型为interface{}
)强制转换为map[string]interface{}
,这样我们才能访问{ {1}}属性来获取其价值。
ID
工作示例:https://play.golang.org/p/Pxq6u7q-NAK
按照@Andrejs的答案,如果您的JSON结构是固定的,那么在结果上使用定义良好的结构会更好(请参阅@danopz的答案)。 It has better performance并花费更少的精力与孩子互动。
答案 1 :(得分:1)
您可能应该为身体定义一个结构,并对其进行编组:
var result struct {
Results []struct{
ID string `json:"ID"`
} `json:"results"`
Index int `json:"index"`
}
err := json.Unmarshal(body, &result)
if err != nil {
// do something, result may be empty
return
}
for i, result := range result.Results {
fmt.Println(i, result.ID)
}
然后,您将可以访问值,例如通过调用result.Index
或result.Results[0].ID
。