在Python中,你可以做类似这样的事情:
r = requests.get("http://wikidata.org/w/api.php", params=params)
data = r.json()
现在data
是一个字典或哈希表(而且,我不需要预先定义字典的结构),我可以通过data ["entities"],data ["entities"] ["Q12"]等来访问键的值。
在golang中该如何实现呢?到目前为止,我有:
resp, err := http.Get("http://wikidata.org/w/api.php?"+v.Encode())
if err != nil {
// handle error
}
defer resp.Body.Close()
decoder := json.NewDecoder(resp.Body)
var data interface{}
decodeErr := decoder.Decode(&data)
if decodeErr != nil {
// handle error
}
fmt.Println(data["entities"], data["entities"]["Q"+id])
这使我编译时遇到错误:invalid operation: data["entities"] (index of type interface {})
那么var data
应该是什么类型呢?我需要预先定义JSON的结构,还是可以处理任何JSON文件/流而不修改代码?
{"key1": "val1", "key2": "val2"}
,但我还需要支持任意数量的级别,例如{"key1": {"c1key1": "c1val1"}}
或{"key1": {"c1key1": {"c2key1: "c2val1"}}}
。 - 01AutoMonkey