去解析数组的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模式做任何事情,我只是在使用它。