尝试合并两个 JSON 文件并重置 ID 值将其替换为新的递增值
Trying to merge two JSON file and reset ID values replace it with new incrementing values
我一直在玩弄 jq (https://stedolan.github.io/jq/),但我似乎无法让它按照我想要的方式工作。
我能够使用此命令合并两个 JSON 文件 jq -s '[.[][]]' file*.json > combined_file.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
}
]
我一直在探索这个答案 (),但我无法弄清楚如何让它发挥作用。
因此,如果您的目标是重新播种 ID,您可以这样做:
$ jq -n '[ foreach inputs[] as $i (0; .+1; $i*{id:(.-1)}) ]' file_?.json
我发现使用 inputs
而不是 slurping 更容易处理多个输入。
想法是从输入中获取每个项目并更新 ID(通过与具有所需 ID 的对象合并)。
先slurp,再concatenate(add
),最后调整"id"值:
$ jq -s 'add | reduce range(0;length) as $n (.; .[$n].id = $n)' file_?.json
此方法适用于 jq 1.3 版或更高版本(可能更早)。
我一直在玩弄 jq (https://stedolan.github.io/jq/),但我似乎无法让它按照我想要的方式工作。
我能够使用此命令合并两个 JSON 文件 jq -s '[.[][]]' file*.json > combined_file.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
}
]
我一直在探索这个答案 (
因此,如果您的目标是重新播种 ID,您可以这样做:
$ jq -n '[ foreach inputs[] as $i (0; .+1; $i*{id:(.-1)}) ]' file_?.json
我发现使用 inputs
而不是 slurping 更容易处理多个输入。
想法是从输入中获取每个项目并更新 ID(通过与具有所需 ID 的对象合并)。
先slurp,再concatenate(add
),最后调整"id"值:
$ jq -s 'add | reduce range(0;length) as $n (.; .[$n].id = $n)' file_?.json
此方法适用于 jq 1.3 版或更高版本(可能更早)。