亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

錯誤:接口轉換 interface {} 是 []interface {}

錯誤:接口轉換 interface {} 是 []interface {}

Go
皈依舞 2022-05-05 17:39:45
我正在構建一個項目,該項目從用戶那里獲取一個術語,然后執行谷歌搜索并返回一個 json 格式的標題列表。我正在使用 serpwow API 來執行谷歌搜索并試圖解析響應。但是我收到的錯誤是:panic: interface conversion: interface {} is []interface {}, not map[string]interface {}.我查看了各種表格并嘗試了解映射的工作原理,但我不確定為什么在這種情況下,我的映射不起作用。有機結果表如下所示:"organic_results": [    {      "position": 1,      "title": "The 10 Best Pizza Places in Dublin - TripAdvisor",      "link": "https://www.tripadvisor.ie/Restaurants-g186605-c31-Dublin_County_Dublin.html",      "domain": "www.tripadvisor.ie",      "displayed_link": "https://www.tripadvisor.ie ? ... ? County Dublin ? Dublin",      "snippet": "Best Pizza in Dublin, County Dublin: Find TripAdvisor traveller reviews of Dublin Pizza places and search by price, location, and more.",      "prerender": false,      "snippet_matched": [        "Pizza",        "Pizza"      ],      "cached_page_link": "https://webcache.googleusercontent.com/search?q=cache:OS-Ar9hB_ngJ:https://www.tripadvisor.ie/Restaurants-g186605-c31-Dublin_County_Dublin.html+&cd=4&hl=en&ct=clnk&gl=ie",      "related_page_link": "https://www.google.com/search?q=related:https://www.tripadvisor.ie/Restaurants-g186605-c31-Dublin_County_Dublin.html+pizza&tbo=1&sa=X&ved=2ahUKEwicjYKvvNjmAhVoSBUIHa9MBhcQHzADegQIARAH",      "block_position": 2    },這是我的代碼片段:package mainimport (    "fmt"    "strings"    serpwow "github.com/serpwow/google-search-results-golang")func main() {    // set API key    apiKey := "Key_Hidden"    //read term to search    fmt.Print("What term would you like to search in google? ")    var term string    fmt.Scanln(&term)    // set up our search parameters    parameters := map[string]interface{}{        "q": term,    }    // retrieve the search results as JSON    response, error := serpwow.GetJSON(parameters, apiKey)    // print the response, or error, if one occurred    if error != nil {        fmt.Println(error)    }}有人可以幫我弄清楚我的邏輯哪里錯了嗎?
查看完整描述

3 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

response["organic_results"]對應于 JSON 數組“organic_results”,因此它不是 a map[string]interface{},而是 a []interface。有多個結果,而不是一個。


for _,item:=range respose["organic_results"].([]interface{}) {

    fmt.Printf("%v", item.(map[string]interface{})["title"])

}


查看完整回答
反對 回復 2022-05-05
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

正如您在 JSON 中看到的,organic_results的值是 JSON 數組,而不是對象;數組的每個元素都是一個對象。因此,您不能斷言organic_results,map[string]interface{}因為正如錯誤所述,它不是地圖,而是[]interface. 例如,您可以這樣做:

    result := fmt.Sprintf("%v", response["organic_results"].([]interface{})[0].(map[string]interface{})["title"])

但是當然這只會讓你得到第一個結果的標題,如果結果為空,它會崩潰。您必須將其視為“從響應中獲取標題”而不是“處理返回的零個或多個結果” - 即您可能希望循環organic_results并對每個結果對象執行某些操作。


查看完整回答
反對 回復 2022-05-05
?
九州編程

TA貢獻1785條經驗 獲得超4個贊

有時,逆向工程也有效,盡管我定義的所有類型看起來都非常直觀,但我也遇到了無法解組自定義 JSON 文件的問題。


type ResourceConfig struct {

    ResourceType map[string]AlphabetType  `json:"resourceType"`

    RedisConfig  RedisConfigT               `json:"redisConfig"`

}


type AlphabetType struct {

    XXX  []string `json:"xxx"`

    YYY []string `json:"yyy"`

}


type RedisConfigT struct {

    Broker string     `json:"broker"`

    DB     string     `json:"db"`

}

json 看起來像這樣:


{

        "resourceType": [

                {"/abcdefg": [{"xxx": ["/vrf", "/lsp", "/vpn"], "yyy": ["/fpc"]}]},

                {"/vrf": [{"xxx": [""], "yyy": ["/abcdefg"]}]},

                {"/lsp": [{"xxx": [""], "yyy": ["/abcdefg"]}]},

                {"/vpn": [{"xxx": [""], "yyy": ["/abcdefg"]}]},

                {"/fpc": [{"xxx": ["/abcdefg"], "yyy": [""]}]}

        ],

        "redisConfig": {"broker": "localhost: 6379", "db": 0}

}

在執行 UnMarshall 時,它會拋出無法解析的錯誤。


所以我決定首先以編程方式將所需的地圖編組為 json,然后打印出來。


{"resourceType":{"/fpc":{"XXX":["/abcdefg"],"YYY":[]},

"/abcdefg":{"XXX":["/vrf","/lsp","/vpn"],"YYY":["/fpc"]},

"/abc":{"XXX":[],"YYY":["/abcdefg"]},

"/vpn":{"XXX":[],"YYY":["/abcdefg"]},

"/vrf":{"XXX":[],"YYY":["/abcdefg"]}},

"redisConfig":{"broker":"localhost:6349","db":"0"}}

現在在 json 文件中使用相同的格式并對其進行 UnMarshal 處理。它將很好地適合您根據最初生成 Json 所定義的類型。


查看完整回答
反對 回復 2022-05-05
  • 3 回答
  • 0 關注
  • 1460 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號