我一直在玩jq(https://stedolan.github.io/jq/),但我似乎无法按照我想要的方式工作。
我能够使用此命令jq -s '[.[][]]' file*.json > combined_file.json
合并两个JSON文件现在,我无法弄清楚如何在我合并时增加“ id ”值它会有重复的id值。
我的json文件看起来像这样:
file_a.json
[ {
"id": 0,
"fruit_name": "Apple",
"fruit_category": "category 1",
"fruit_count": 1
},
{
"id": 1,
"fruit_name": "Apricot",
"fruit_category": "category 2",
"fruit_count": 1
},
{
"id": 2,
"fruit_name": "Avocado",
"fruit_category": "category 3",
"fruit_count": 2
}
]
file_b.json
[ {
"id": 0,
"fruit_name": "Banana",
"fruit_category": "category 4",
"fruit_count": 1
},
{
"id": 1,
"fruit_name": "Bilberry",
"fruit_category": "category 5",
"fruit_count": 1
},
{
"id": 2,
"fruit_name": "Blackberry",
"fruit_category": "category 6",
"fruit_count": 2
}
]
我一直在探索这个答案(How do I create an incremental index with jq),但我无法弄清楚如何让它发挥作用。
答案 0 :(得分:3)
因此,如果你的目标是重新设置ID,你可以这样做:
$ jq -n '[ foreach inputs[] as $i (0; .+1; $i*{id:(.-1)}) ]' file_?.json
我发现使用inputs
而不是更容易使用多个输入。
这个想法是从输入中获取每个项目并更新id(通过与具有所需id的对象合并)。
答案 1 :(得分:0)
首先是slurp,然后连接(add
),最后调整“id”值:
$ jq -s 'add | reduce range(0;length) as $n (.; .[$n].id = $n)' file_?.json
这种方法可以使用jq或更高版本的1.3版本(可能更早)。