当数组名称未知时,将数组分组并将它们移动到新对象下
Group arrays and move them under new object when array names are not known
我有以下JSON
[
{
"name": "T1",
"R10": ["A","B"]
},
{
"name": "T1",
"M20": ["C"]
},
{
"name": "A1",
"C20": ["A","B"]
},
{
"name": "B1",
"V30": ["3"]
},
{
"name": "C1",
"X50": ["1"]
}
]
我想根据 "name"
对数组进行分组并将它们推送到新的 "Arrays"
对象下。所以结果应该如下所示:
[
{
"name": "T1",
"Arrays": {
"R10": ["A","B"],
"M20": ["C"]
}
},
{
"name": "A1",
"Arrays": {
"C20": ["A","B"]
}
},
{
"name": "B1",
"Arrays": {
"V30": ["3"]
}
},
{
"name": "C1",
"Arrays": {
"X50": ["1"]
}
}
]
我可以根据 "name"
的值进行选择
[.[] | select ( .name | test("T1") )] | add
- 它确实将数组组合在一起,但我不知道如何概括过滤器 - 将其应用于整个 JSON 而不是根据名称进行过滤。
如果我事先不知道数组的名称,我也卡在如何将数组推送到 "Arrays"
对象下。
这肯定需要 group_by/1
在 .name
字段上,然后根据需要重新排序对象。
[ group_by(.name)[] | add ] | map( { name: .name, Arrays: del(.name) } )
由于 group-by 函数对应用的字段进行内部排序,即在您的情况下为 .name
,因此最终结果的键顺序由 [=12= 的升序决定] 字段。
我有以下JSON
[
{
"name": "T1",
"R10": ["A","B"]
},
{
"name": "T1",
"M20": ["C"]
},
{
"name": "A1",
"C20": ["A","B"]
},
{
"name": "B1",
"V30": ["3"]
},
{
"name": "C1",
"X50": ["1"]
}
]
我想根据 "name"
对数组进行分组并将它们推送到新的 "Arrays"
对象下。所以结果应该如下所示:
[
{
"name": "T1",
"Arrays": {
"R10": ["A","B"],
"M20": ["C"]
}
},
{
"name": "A1",
"Arrays": {
"C20": ["A","B"]
}
},
{
"name": "B1",
"Arrays": {
"V30": ["3"]
}
},
{
"name": "C1",
"Arrays": {
"X50": ["1"]
}
}
]
我可以根据 "name"
的值进行选择
[.[] | select ( .name | test("T1") )] | add
- 它确实将数组组合在一起,但我不知道如何概括过滤器 - 将其应用于整个 JSON 而不是根据名称进行过滤。
如果我事先不知道数组的名称,我也卡在如何将数组推送到 "Arrays"
对象下。
这肯定需要 group_by/1
在 .name
字段上,然后根据需要重新排序对象。
[ group_by(.name)[] | add ] | map( { name: .name, Arrays: del(.name) } )
由于 group-by 函数对应用的字段进行内部排序,即在您的情况下为 .name
,因此最终结果的键顺序由 [=12= 的升序决定] 字段。