在Go中,排序是一种非常常见的操作。当我们处理JSON对象数组时,有时候需要按照特定的属性对数组进行排序。这时,我们可以使用Go内置的sort包来处理。
假设我们有如下JSON对象数组:
[ {"name": "Lucas", "age": 21}, {"name": "Lily", "age": 25}, {"name": "Tom", "age": 18}, {"name": "Kathy", "age": 23} ]
现在,我们要按照年龄从小到大的顺序对这个数组进行排序。首先,我们需要定义一个结构体来表示上面的JSON对象:
type Person struct { Name string `json:"name"` Age int `json:"age"` }
然后,我们可以使用json包的Unmarshal函数将JSON对象数组解码成Person对象数组:
var persons []Person err := json.Unmarshal(data, &persons) if err != nil { log.Fatal(err) }
接着,我们可以使用sort.Slice函数来对Person对象数组进行排序。需要注意的是,在传入Less函数时,我们需要先判断传入的参数是不是*Person类型,然后再进行比较。
sort.Slice(persons, func(i, j int) bool { p1, p2 := persons[i], persons[j] if p1.Age != p2.Age { return p1.Age< p2.Age } return p1.Name< p2.Name })
最后,我们可以使用json包的MarshalIndent函数将Person对象数组重新编码成JSON对象数组:
data, err := json.MarshalIndent(persons, "", " ") if err != nil { log.Fatal(err) } fmt.Println(string(data))
这样,我们就成功地对JSON对象数组进行了排序。