[英]Go Lang Help - Accessing Array/Slice of interfaces
我正在嘗試使用嵌套數據解碼GO中的動態/隨機JSON響應
body, _ := ioutil.ReadAll(response.Body)
resp := make(map[string]interface{})
err = json.Unmarshal(body, &resp)
fmt.Printf("BODY: %T<\n", body)
fmt.Printf("BODY: %s<\n", body)
fmt.Printf("RESP: %s<\n", resp)
fmt.Printf("RESP: %T<\n", resp)
fmt.Printf("RESP[results]: %T<\n", resp["results"])
fmt.Printf("RESP[results]: %s<\n", resp["results"])
body是來自HTTP服務器的JSON結果,我解組它,結果看起來是一片字節。
身體:[] uint8
BODY:{“results”:[{“code”:500.0,“errors”:[“配置文件'c2-web-2.conf'已存在。”],“status”:“無法創建對象”。 }]}
因此,我將其解組為resp,並按預期工作。
RESP:map [string] interface {}
RESP:map [結果:[map [code:%!s(float64 = 500)錯誤:[配置文件'c2-web-2.conf'已存在。]狀態:無法創建對象。]]] <
我可以使用關鍵結果訪問地圖。
RESP [結果]:[]界面{}
RESP [結果]:[map [code:%!s(float64 = 500)錯誤:[配置文件'conf.d / hosts / c2-web-2.conf'已存在。] status:無法創建對象。 ] <
現在我想要訪問它的“代碼”,“錯誤”和“狀態”在resp [“結果”]這看起來像一個數組或切片我嘗試索引它但我在編譯時得到錯誤
./create_host.go:62:無效操作:resp [“results”] [0](類型interface {}不支持索引)
我已經做了很多谷歌搜索,嘗試解組resp [“結果”]等數據,但幾天后我沒有取得多大進展。
我應該如何訪問似乎是數組成員的地圖? 數據結構不能保證,所以我無法創建一個結構並解組。
謝謝
一位同事提供了下面的代碼片段,可以訪問我正在尋找的地圖條目。
respBody, _ := ioutil.ReadAll(response.Body)
var rsp interface{}
if err := json.Unmarshal(respBody, &rsp); err != nil {
log.Fatal(err)
}
resultMap := rsp.(map[string]interface{})["results"].([]interface{})[0].(map[string]interface{})
fmt.Printf("test: %s<\n", resultMap["errors"] )
test:[配置文件'c2-web-2.conf'已經存在。] <
我相信你需要做一個類型斷言。 你有一個interface{}
,但你需要某種切片來索引。 試試resp["results"].([]interface{})[0]
? (對不起,我自己沒有機會測試過這個。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.