首页 > 解决方案 > 解码数组时无法将数组解组为 Go 结构

问题描述

我正在尝试将 JSON 字符串正确解码为对象。

我定义了以下结构:

type AjaxModelsList struct {
    Id float64 `json:"Id"`
    Name string `json:"Name"`
    CarId float64 `json:"CarId"`
    EngName string `json:"EngName"`
}

type AjaxModelsData struct {
    ModelList []AjaxModelsList `json:"ModelList"`
}

type AjaxModels struct {
    Status bool `json:"status"`
    Data map[string]AjaxModelsData `json:"data"`

}

定义的对象是

{
 "status": true,
 "data": {
 "ModelList": [{
   "Id": 1,
   "Name": "foo",
   "CarId": 1,
   "EngName": "bar"
  }]
 }
}

我使用以下代码解组:

c :=AjaxModels{}
if err := json.Unmarshal(body_byte,&c); err != nil {
    log.Fatalf("an error occured: %v",err)
}

我得到以下输出:

an error occured: json: cannot unmarshal array into Go struct field AjaxModels.data of type main.AjaxModelsData

因为我使用[]AjaxModelsList它是一个切片,所以我不应该得到这个错误。我可能错过了什么,但是什么?

标签: jsongounmarshalling

解决方案


在结构中是json,而在 Go中是。改为改为。dataobject[key]arrayDatamap[key]struct.sliceDatamap[key]slice

例如

type AjaxModels struct {
    Status bool                      `json:"status"`
    Data   map[string][]AjaxModelsList `json:"data"`
}

https://play.golang.org/p/Sh_vKVL-D--


推荐阅读