去解析数组的JSON数组

时间:2016-12-09 09:24:39

标签: json go

我有这样的数据

"descriptionMap": [[[1,2], "a"], [[3,4], "b"]]

我试图用

解码它
  DescriptionMap []struct {
    OpcodeTableIdPair []int
    OpcodeDescription string   
  } `json:"descriptionMap"`

但我继续获得空数组,

[[{[] } {[] }]]

1 个答案:

答案 0 :(得分:3)

您有一个非常不幸的JSON架构,它将数组视为对象。在这种情况下你能做的最好的事情是这样的:

type Body struct {
    DescriptionMap []Description `json:"descriptionMap"`
}

type Description struct {
    IDPair      []int
    Description string
}

func (d *Description) UnmarshalJSON(b []byte) error {
    arr := []interface{}{}
    err := json.Unmarshal(b, &arr)
    if err != nil {
        return err
    }

    idPair := arr[0].([]interface{})
    d.IDPair = make([]int, len(idPair))
    for i := range idPair {
        d.IDPair[i] = int(idPair[i].(float64))
    }

    d.Description = arr[1].(string)

    return nil
}

游乐场:https://play.golang.org/p/MPho12GJfc

请注意,如果JSON中的任何类型不匹配,这将会引起恐慌。您可以创建一个更好的版本,在这种情况下返回错误。