使用jq将两个数组合并为一个对象数组
Using jq to merge two arrays into one array of objects
我是 jq 的新手,我想重塑我的 JSON 文件。
我有 JSON 结构如下:
{
"a": [1, 2, 3, 4 ...],
"b": [
{
"x": 1000,
"value": 1
},
{
"x": 1000,
"value": 2
},
{
"x": 1000,
"value": 3
}
...
]
}
我想知道如何使用 jq 获得这样的结果:
[
{
"value": 1,
"from": "a",
},
{
"value": 2,
"from": "a"
},
...
{
"value": 1,
"from": "b"
},
{
"value": 2,
"from": "b"
}
...
]
创建两个列表,一个来自 .a
,一个来自 .b
,并将它们与 +
合并。
在第一个列表中,创建对象 value:
设置为原始内容并添加 from: "a"
;在第二个列表中,从 .b
的元素中删除 .x
并再次添加 from.
jq '[.a[] | {value:(.), from: "a"}] + [.b[] | del(.x) + {from: "b"}]
这里有一个非常通用但不够健壮的解决方案:
map_values( if type == "array"
then map(if type == "object" then .value else . end)
else . end)
| [ keys_unsorted[] as $k
| .[$k][] as $v
| { value: $v, from: $k } ]
我是 jq 的新手,我想重塑我的 JSON 文件。
我有 JSON 结构如下:
{
"a": [1, 2, 3, 4 ...],
"b": [
{
"x": 1000,
"value": 1
},
{
"x": 1000,
"value": 2
},
{
"x": 1000,
"value": 3
}
...
]
}
我想知道如何使用 jq 获得这样的结果:
[
{
"value": 1,
"from": "a",
},
{
"value": 2,
"from": "a"
},
...
{
"value": 1,
"from": "b"
},
{
"value": 2,
"from": "b"
}
...
]
创建两个列表,一个来自 .a
,一个来自 .b
,并将它们与 +
合并。
在第一个列表中,创建对象 value:
设置为原始内容并添加 from: "a"
;在第二个列表中,从 .b
的元素中删除 .x
并再次添加 from.
jq '[.a[] | {value:(.), from: "a"}] + [.b[] | del(.x) + {from: "b"}]
这里有一个非常通用但不够健壮的解决方案:
map_values( if type == "array"
then map(if type == "object" then .value else . end)
else . end)
| [ keys_unsorted[] as $k
| .[$k][] as $v
| { value: $v, from: $k } ]