В Python вы можете сделать что-то вроде этого:
r = requests.get("http://wikidata.org/w/api.php", params=params)
data = r.json()
И теперь data
— это словарь или хеш-таблица (к тому же мне не нужно было заранее определять структуру словаря), и я могу получить доступ к значениям ключей, выполнив data["entities"], data["entities"][" Q12"] и т. д.
Как бы я сделал это в голанге? Пока у меня это:
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 без изменения кода?