2017-01-23 165 views
-1

我是Golang的新手,我試圖解析大量的json,就像從一個有大量數據的API中獲取的那樣。該documentation介紹瞭如何使用任何JSON做到這一點:如何在Golang中解析巨大的json

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

這工作得很好,但是當我使用的JSON,我從Twitter的API獲得,就像一個在上Twitter dev site我得到的參考結束這個錯誤:

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

我知道有類似的問題,但我找不到答案。有人可以推薦我更好的方法來解決這個問題嗎?

我的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

非常感謝你,這工作正常,原諒我這樣一個愚蠢的問題。 –