将数组映射到JQ中的其他数组值



如何将数组映射到jq中的其他数组值?

我有两个JSON数组。

[
{
"date": "2021/9/12",
"rate": 7,
"path": "f"
},
{
"date": "2021/9/13",
"rate": 8,
"path": "f"
},
{
"date": "2021/9/14",
"rate": 8,
"path": "f"
},
]
[
"562949953740755",
"562949953740743",
"562949953740744"
]

我想在下面得到这样的结果。

[
{
"date": "2021/9/12",
"rate": 7,
"path": "f",
"inode": "562949953740755"
},
{
"date": "2021/9/13",
"rate": 8,
"path": "f",
"inode": "562949953740743"
},
{
"date": "2021/9/14",
"rate": 8,
"path": "f",
"inode": "562949953740744"
},
]

我尝试过:但我不知道如何做到这一点。

jq -s '.[1] as $file | .[0] | (.[].path) |= (range($file|length) as $i | $file[$i]) ' <(cat a.json) <(cat b.json)

不要重新发明transpose轮子。

jq -s 'transpose | map(.[0] + {inode: .[1]})' a.json b.json

在线演示

在处理原始文件之前,使用数组文件(inode)作为引用并诋毁其内容。

jq --slurpfile inode b.json '
reduce range(0, ($inode[0]|length)) as $d (.; .[$d] += {inode: $inode[0][$d]})' a.json

请注意,只要两个JSON数组中的元素数量相等,这就可以工作。

另一次尝试不涉及任何";"诋毁";

jq -n 'input as $inode | input | 
reduce range(0, length) as $d (.; .[$d] += {inode: $inode[$d]})' b.json a.json

最新更新