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

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

如何在 Go 中解析數組元素具有多個類型的 JSON?

如何在 Go 中解析數組元素具有多個類型的 JSON?

Go
Helenr 2022-10-04 15:53:46
如何將 JSON 響應從 https://api.twitchinsights.net/v1/bots/online 解析為 Go 中的數組并循環訪問每個條目?我不理解結構,因為沒有鍵只有值...任何人都可以幫助并解釋這是如何工作的嗎?我已經映射了它,但后來我得到了類似的東西map[_total:216 bots:[[anotherttvviewer 67063 1.632071051e+09] [defb 26097 1.632071051e+09] [commanderroot 17531 1.632071048e+09] [apparentlyher 16774 1.63207105e+09]...但我無法遍歷地圖。
查看完整描述

1 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

由于您正在使用的 API 返回的數據可以是字符串或數字(在數組屬性中),因此您需要將其用作該數組的每個元素的類型,因為空接口(https://tour.golang.org/methods/14)在運行時適用于任何類型。bots[]interface{}


type response struct {

    Bots  [][]interface{} `json:"bots"`

    Total int             `json:"_total"`

}

然后,在循環訪問切片中的每個項目時,可以使用反射檢查其類型。


理想的做法是 API 在架構中返回數據,其中每個 JSON 數組元素都與其數組中的其他元素具有相同的 JSON 類型。這將更容易解析,特別是使用像Go這樣的靜態類型語言。


例如,API 可以返回如下數據:


{

  "bots": [

    {

      "stringProp": "value1",

      "numberProps": [

        1,

        2

      ]

    }

  ],

  "_total": 1

}

然后,您可以編寫一個表示 API 響應的結構,而無需使用空接口:


type bot struct {

    StringProp  string    `json:"stringProp"`

    NumberProps []float64 `json:"numberProps"`

}


type response struct {

    Bots  []bot `json:"bots"`

    Total int   `json:"_total"`

}

但有時您無法控制正在使用的API,因此您需要愿意以更動態的方式解析響應中的數據。如果您確實可以控制 API,則應考慮以這種方式返回數據。


查看完整回答
反對 回復 2022-10-04
  • 1 回答
  • 0 關注
  • 78 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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