每当您拥有未知的json属性名称,或者它们不能很好地表现为struct的字段时,就会或多或少地保留一个选项,即map。因此,首先您需要将"data"
属性编组到地图中。
但是,Go中的地图是通过由一组唯一键索引的无序组元素实现的。因此,基本上没有办法在Go中确保地图的顺序,因此您必须将地图中的数据传输到可以排序的内容中,例如切片。 >
将数据存储在切片中之后,可以使用标准的sort
程序包按所需顺序对切片进行排序。
您可以先声明所需的类型:
type DataItem struct {
Key string `json:"-"`
Fields DataFields `json:"fields"`
}
type DataFields struct {
Name string `json:"name"`
FavColor string `json:"fav_color"`
Address string `json:"address"`
}
然后解组json
var obj struct {
TestCode int `json:"testCode"`
ReplyTest string `json:"replyTest"`
Data map[string]*DataItem `json:"data"`
}
if err := json.Unmarshal(data,&obj); err != nil {
panic(err)
}
将地图内容传输到一个切片
items := []*DataItem{}
for key,item := range obj.Data {
item.Key = key // keep track of the key because it will be used to order the contents of the slice
items = append(items,item)
}
最后对切片进行排序
sort.Slice(items,func(i,j int) bool {
return items[i].Key < items[j].Key
})
https://play.golang.com/p/D2u46veOQwD
本文链接:https://www.f2er.com/3124428.html