所以我有一个看起来像这样的JSON数组:
[
{
row: [
{
boat: {
description: 'Books',
version: '2',
id: 6
},
airplanes: [
{
airplane: [
{
description: 'DVD',
version: 2,
uid: 69,
wid: 65,
id: 84
}
],
trains: {
train: [
{
description: 'Pictures',
version: 2,
id: 149
}
],
actions: [
{
description: 'This is a really long sentence.',
version: 2,
tid: 69.01,
id: 452
},
{
description: 'article 2',
version: 2,
tid: 69.02,
id: 453
},
{
description: 'developer 1',
version: 2,
tid: 69.03,
id: 454
}
]
}
},
{
airplane: [
{
description: 'Games',
version: 2,
uid: 65,
wid: 61,
id: 80
}
],
trains: {
train: [
{
description: 'another great descriptions.',
version: 2,
id: 145
}
],
actions: [
{
description: 'being indecisive is good.',
version: 2,
tid: 65.01,
id: 442
},
{
description: 'couches are comfortable',
version: 2,
tid: 65.02,
id: 443
}
]
}
}
]
}
]
}
]
我试图通过'wid'按升序对上面的输出进行排序,但仍然可以保留整体顺序。例如,在上面,数组的元素0中的wid是65,并且数组的元素1的wid值是61.因此,应该交换元素1和元素0。有没有内置的javascript方法来像这样排序json?
我的json数组输出比提供的示例大很多。
答案 0 :(得分:3)
Underscore和LoDash都有一种排序方法,可以执行您正在寻找的内容。在此示例中,我假设您显示的数据结构存储在名为data
的变量中。
_.each(data, function(obj) {
_.each(obj.row, function(row) {
// note the reassignment, _.sortBy does not sort in-place
row.airplanes = _.sortBy(row.airplanes, function(airplane) {
return airplane.wid; // This will sort ascending.
// To sort descending, simply multiply by -1
});
});
});
那是做什么的?它将每个数组元素放在根数据结构中并循环遍历它(这是第一个_.each
)。然后在每个对象中,它循环遍历每个row
元素,并按每个元素中包含的row.airplanes
元素排序wid
数组。
希望这会对你有所帮助。另外,您发布的数据严格无效JSON。每个密钥应该是双引号,即"row"
,而不仅仅是row
,单引号对于分隔字符串无效,即"DVD"
而不是'DVD'
。此外,您的boat
版本是字符串,而您的其他版本标识符是整数,尝试将您的版本标识符保留为整数是个不错的主意。
答案 1 :(得分:0)
我建议使用优秀的jq命令行JSON处理器。非常快,因为它是用便携式C编写的。易于理解documentation。
cat <file.json> | jq . -S