簡體   English   中英

Go Lang幫助 - 訪問陣列/切片接口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM