golang的json和map排序问题

455 阅读1分钟

背景

在业务逻辑中,需要使用golang实现对json中某个array进行排序

方法

先把json的array用map记录,key为排序的依据,value为array item。但是golang的map是无序的,所以我们还需要使用一个slice去记录key,然后使用进行sort

代码示例

// 获取array
priceCount, _ := jsonParsed.ArrayCountP("trans.price")
priceMap := make(map[string]*gabs.Container)
dateSlice := make([]string, 0, priceCount)
// 用map和slice记录
for i := 0; i < priceCount; i++ {
   item, _ := jsonParsed.ArrayElementP(i, "trans.price")
   date, _ := item.Path("date").Data().(string)
   priceMap[date] = item
   dateSlice = append(dateSlice, date)
}
// 排序
sort.Strings(dateSlice)
// 去除多余
if len(dateSlice) > 6 {
   dateSlice = dateSlice[len(dateSlice)-6 : len(dateSlice)]
}

for _, k := range dateSlice {
   if item, ok := priceMap[k]; ok {
      _ = jsonObj.ArrayAppendP(item.Data(), "houseInfo.trans_price.price")
   }
}