去解析数组的JSON数组

去解析数组的JSON数组,json,go,Json,Go,我有这样的数据 "descriptionMap": [[[1,2], "a"], [[3,4], "b"]] 我正试着用计算机解码 DescriptionMap []struct { OpcodeTableIdPair []int OpcodeDescription string } `json:"descriptionMap"` 但我不断得到空数组 [[{[] } {[] }]] 您有一个非常不幸的JSON模式,它将数组视为对象。在这种情况下,您能做的最好的

我有这样的数据

"descriptionMap": [[[1,2], "a"], [[3,4], "b"]]
我正试着用计算机解码

  DescriptionMap []struct {
    OpcodeTableIdPair []int
    OpcodeDescription string   
  } `json:"descriptionMap"`
但我不断得到空数组

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

您有一个非常不幸的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
}
操场:


但是请注意,如果JSON中的任何类型不匹配,这将导致死机。您可以创建一个更好的版本,在这种情况下返回错误。

您的结构将与该JSON不匹配。在JSON中,有带数组和字符串的数组;在Go中,有带数组和字符串的结构数组。在第二个层次上,数组和结构之间存在不匹配。@GrzegorzŻur我也尝试了
DescriptionMap[]]struct
,以适应这种情况,但这不起作用。我相信没有简单的方法可以直接解组混合类型的数组([num,num],“string”)。您必须编写一个自定义解组器--谢谢。这真的很有效。不幸的是,我不能用JSON模式做任何事情,我只是在使用它。