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

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

在 Go 中將 JSON 解組為地圖

在 Go 中將 JSON 解組為地圖

Go
料青山看我應如是 2021-10-18 10:20:25
我無法弄清楚如何將 JSON 文件的“子部分”加載到地圖元素中。背景:我試圖解組具有嚴格結構的有點復雜的配置文件,因此我認為最好解組為“靜態”結構而不是接口{}。例如,這是一個簡單的 JSON 文件:{    "set1": {        "a":"11",        "b":"22",        "c":"33"    }}此代碼有效:package mainimport (    "encoding/json"    "fmt"    "io/ioutil"    "os")type JSONType struct {    FirstSet ValsType `json:"set1"`}type ValsType struct {    A string `json:"a"`    B string `json:"b"`    C string `json:"c"`}func main() {    file, e := ioutil.ReadFile("./test1.json")    if e != nil {        fmt.Println("file error")        os.Exit(1)    }    var s JSONType    json.Unmarshal([]byte(file), &s)    fmt.Printf("\nJSON: %+v\n", s)}但這不會:package mainimport (    "encoding/json"    "fmt"    "io/ioutil"    "os")type JSONType struct {    FirstSet ValsType `json:"set1"`}type ValsType struct {    Vals map[string]string}func main() {    file, e := ioutil.ReadFile("./test1.json")    if e != nil {        fmt.Println("file error")        os.Exit(1)    }    var s JSONType    s.FirstSet.Vals = map[string]string{}    json.Unmarshal([]byte(file), &s)    fmt.Printf("\nJSON: %+v\n", s)}未加載 Vals 地圖。我究竟做錯了什么?謝謝你的幫助!這是一個更好的例子:{    "set1": {        "a": {            "x": "11",            "y": "22",            "z": "33"        },        "b": {            "x": "211",            "y": "222",            "z": "233"        },        "c": {            "x": "311",            "y": "322",            "z": "333"        },    }}代碼:package mainimport (    "encoding/json"    "fmt"    "io/ioutil"    "os")type JSONType struct {    FirstSet map[string]ValsType `json:"set1"`}type ValsType struct {    X string `json:"x"`    Y string `json:"y"`    Z string `json:"z"`}func main() {    file, e := ioutil.ReadFile("./test1.json")    if e != nil {        fmt.Println("file error")        os.Exit(1)    }    var s JSONType    json.Unmarshal([]byte(file), &s)    fmt.Printf("\nJSON: %+v\n", s)}
查看完整描述

1 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

我相信這是因為您的模型中有額外的間接層。


type JSONType struct {

    FirstSet map[string]string `json:"set1"`

}

應該夠了。如果您map[string]string在 json 中指定對象被識別為該映射。你創建了一個結構來包裝它,但是像這樣的一團json;


{

    "a":"11",

    "b":"22",

    "c":"33"

}

其實可以直接解組成 map[string]string


編輯:基于評論的其他一些模型


type JSONType struct {

    FirstSet map[string]Point `json:"set1"`

}


type Point struct {

     X string `json:"x"`

     Y string `json:"y"`

     Z string `json:"z"`

}

這使您的 3-d 點成為靜態類型的結構,這很好。如果您想做快速而骯臟的事情,您也可以使用map[string]map[string]string which 將提供地圖地圖,以便您可以訪問點值,例如FirstSet["a"]["x"],它會返回"11".


第二次編輯;顯然我沒有仔細閱讀你的代碼,因為上面的例子是一樣的?;诖耍也履阆胍?/p>


 FirstSet map[string]map[string]string `json:"set1"`

選項。盡管在您編輯后我并不完全清楚。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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