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

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

使用不同的鍵解組相同的 json 對象以進行切片結構

使用不同的鍵解組相同的 json 對象以進行切片結構

Go
慕后森 2023-07-17 16:44:46
我不知道如何在不重寫整個解析器的情況下使用不同的鍵將相同的 JSON 對象序列化為 Go 切片結構。例如,我可以收到的 JSON,它可能包含具有不同密鑰的 N 個對象(localhost1/localhost2/localhost3 等)。在這個例子中,我有一個鍵 localhost1/localhost2/localhost3,每個鍵只有一個字段就可以了。{"stats": {        "localhost1": {            "ok": 1        },        "localhost2": {            "ok": 1        },        "localhost3": {            "ok": 1        }     }}我可以使用以下結構映射來解壓縮整個 JSON。type HostStatus struct {        Ok int `json:"ok"`}type Test struct {    Stats struct {        Localhost1 HostStatus `json:"localhost1"`        Localhost2 HostStatus `json:"localhost2"`        Localhost3 HostStatus `json:"localhost3"`    }  `json:"stats"`}整個示例。package mainimport (    "encoding/json"    "fmt")type HostStatus struct {        Ok int `json:"ok"`}type Test struct {    Stats struct {        Localhost1 HostStatus `json:"localhost1"`        Localhost2 HostStatus `json:"localhost2"`        Localhost3 HostStatus `json:"localhost3"`    }  `json:"stats"`}func main() {    var resp = []byte(`{        "stats": {            "localhost1": {            "ok": 1        },        "localhost2": {            "ok": 1        },        "localhost3": {            "ok": 1        }        }    }`)    var r Test    er := json.Unmarshal(resp, &r)    if er != nil {        panic(er)    } else {        fmt.Println(r)    }}該解決方案的主要問題是,它需要在每個 HostStatus 的 Stats 結構中進行硬編碼,通過 json:xxx 標記將 1:1 映射到 JSON 輸出。但我想找到一種方法將所有這些對象映射到 HostStatus 切片/數組,因為我不知道我可能會收到多少個 HostStatus 對象以及每個對象的鍵是什么。
查看完整描述

1 回答

?
Qyouu

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

嘗試這個:

type Test struct {
    Stats map[string]HostStatus `json:"stats"`
    }


查看完整回答
反對 回復 2023-07-17
  • 1 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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