2017-01-23 3 views
-1

Я новичок в Golang, и я пытаюсь разобрать большой json, как те, которые вы получаете от API, у которого много данных. documentation объясняет, как сделать это с любым JSON:Как разобрать огромный json в Golang

b := []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`) 
var f interface{} 
err := json.Unmarshal(b, &f) 
m := f.(map[string]interface{}) 

Это работает отлично, но когда я использую JSON, что я получаю от API Twitter, как тот, в конце ссылки на Twitter dev site я получаю эта ошибка:

interface conversion: interface {} is []interface {}, not map[string]interface {}

Я знаю, что есть похожие вопросы, но я не мог найти ответ. Может ли кто-нибудь порекомендовать мне лучший способ решить эту проблему?

My go версия go1.6.2 linux/amd64.

Спасибо!

ответ

2

В этом случае вы не размонтируете один объект JSON, а массив объектов JSON, поэтому у вас возникла проблема с анализом ответа API. Ошибка, которую вы видите, это говорит вам о фактическом типе f. Другой пример работал, потому что это единственный объект JSON, который может быть отображен как map[string]interface{} Взгляните на это:

var f []interface{} 
err := json.Unmarshal(str, &f) 
if err != nil { 
    fmt.Println(err) 
    return 
} 

for _, v := range f { 
    z := v.(map[string]interface{}) 
    for k2, v2 := range z { 
     fmt.Println("Key:", k2, "Value:", v2) 
    } 
} 

f должен быть типа []interface{} массива интерфейсов. В зависимости от того, как вы планируете разбирать ответ API, вы можете сделать что-то вроде того, что я делаю в цикле for, чтобы представить каждую пару ключей, значений.

+0

Большое вам спасибо, это прекрасно работает и простит меня за такой глупый вопрос. –

Смежные вопросы