gpt4 book ai didi

json - jq 合并两个 json 文件并在合并文件中为每个文件创建一个键作为文件名

转载 作者:行者123 更新时间:2023-12-04 12:40:37 24 4
gpt4 key购买 nike

问题 :

如何使用 jq 合并多个 JSON 文件。每个合并的对象在最终合并的文件中都必须有自己的键名。

file1.json :

{
"shoe": 0,
"temp": "10"
}

file2.json :
{
"num": {
"sock": 0,
"ratio": {
"cat": 100,
"dog": 0
}
},
"hair": "blue"
}

所需的合并输出 :
{
"file1": {
"shoe": 0,
"temp": "10"
},
"file2": {
"num": {
"sock": 0,
"ratio": {
"cat": 100,
"dog": 0
}
},
"hair": "blue"
}
}

尝试 1:
下面的问题是,如果有意义的话,对象层次结构会被合并:
jq --slurp 'add' file1.json file2.json

尝试 1 输出(不是我想要的) :
{
"shoe": 0,
"temp": "10"
"num": {
"sock": 0,
"ratio": {
"cat": 100,
"dog": 0
}
},
"hair": "blue"
}

最佳答案

jq有一个内置变量 input_filename表示应用过滤器的文件名。所以你可以做类似的事情

jq -n 'reduce inputs as $s (.; .[input_filename] += $s)'  file1.json file2.json
reduce expression 接受整个输入对象并使用键作为正在使用的文件名构造最终的 JSON。

您可以更进一步,并希望有选择地删除 JSON 的扩展部分 .json , 使用可用的修剪功能。下面的代码假设输入文件以 .json 结尾并且不适用于任何其他扩展
jq -n 'reduce inputs as $s (.; (.[input_filename|rtrimstr(".json")]) += $s)'

关于json - jq 合并两个 json 文件并在合并文件中为每个文件创建一个键作为文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59768530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com