2013-10-02 163 views
1

我正在盡我所能將一些json數據解組成可用的形式,但似乎無法獲得它。這些數據是:使用Go訪問嵌套數組和對象中的數據

{ 
    "series": [ 
     { 
      "series_id": "PET.EMD_EPD2D_PTE_NUS_DPG.W", 
      "name": "U.S. No 2 Diesel Retail Prices, Weekly", 
      "units": "Dollars per Gallon", 
      "updated": "2013-09-27T07:21:57-0400", 
      "data": [ 
       [ 
        "20130923", 
        "3.949" 
       ], 
       [ 
        "20130916", 
        "3.974" 
       ] 
      ] 
     } 
    ] 
} 

我試圖讓陣列data下到一個變量,這樣我就可以通過他們循環,這樣做:

if data[i][0] == "20130923" { 
    fuelPrice.Price == data[i][1] 
} 

我試着來解讀數據到一個結構,但我無法弄清楚如何通過series ......即我不知道如何做嵌套數組。像這樣的事情不工作:

type Series struct { 
    SeriesId string 
    Name  string 
    Data  [][]string 
} 

type RawFuelPrice struct { 
    Series []Series 
    Data []interface{}[] 
} 

另外,如果我解組爲interface{},我無法弄清楚如何訪問數據...

我絕對是一個初學者。感謝您的時間和精力。

+0

見例如http://stackoverflow.com/questions/19145202/marshal-of-json-rawmessage http://stackoverflow.com/questions/19088799/go-xml-parsing-doesnt-see-any-fields http:// stackoverflow。 com/questions/19081479/xml-decoding-in-go http://stackoverflow.com/questions/18806325/json-decoder-gives-unexpected-results以及http://golang.org/pkg/encoding/json /#pkg-examples。 XML和JSON解碼工作非常相似,只需使用'json:「xyz」'作爲結構標記。 – Volker

+0

@Volker,抱歉,我只是無法弄清楚這一點。我已經試過這樣:'型EIASeries [] {結構 \t SeriesId字符串'JSON: 「series_id」' \t數據接口{}'JSON: 「數據」' } 型EIAResponse結構{ \t系列EIASeries' json:「series」' }'當我登錄var resp EIAResponse時,我得到了很多數據,但是當我登錄resp.Series或log resp.Series.Data時,我什麼也得不到。謝謝。 –

+0

也許http://play.golang.org/p/CZFFWMIdoG是你想要的。 – Volker

回答

1

你的代碼很好 - 除了RawFuelPrice結構的Data成員。我不認爲這個語法是有效的,並且在JSON blob的頂層沒有Data屬性。

這就是說,這是你會怎麼弄出來的數據:

var rfp RawFuelPrice 
json.Unmarshal(input, &rfp) 
for _,s := range rfp.Series { 
    fmt.Println("Name",s.Name) 
    for _,d := range s.Data { 
     fmt.Println("\tdate:",d[0]) 
     fmt.Println("\tprice:",d[1]) 
    } 
    fmt.Println() 
} 

雖然你可能要檢查所有的數據都在那裏。

去遊樂場鏈接:http://play.golang.org/p/C47lZJ_L0o

+0

'Data [] interface {}'是多餘的。它不匹配json數據中的任何內容。 – ANisus