淘先锋技术网

首页 1 2 3 4 5 6 7

在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对象数组进行了排序。