如何使用附加密钥将两个 json 文件与 jq 合并
How to merge two json file with jq with additional key
我有 2 个 json 文件,想将它们合并到一个唯一的文件中,但有额外的键,例如“first_key”和“second_key”
这里是文件内容:
文件 1
{
"timestamp": 1382461861,
"value": {
"aaa": {
"value1": "v1",
"value2": "v2"
},
"bbb": {
"value1": "v1",
"value2": "v2"
},
"ccc": {
"value1": "v1",
"value2": "v2"
}
}
}
文件 2
{
"timestamp": 138246330,
"value": {
"ddd": {
"value1": "v1",
"value2": "v2"
},
"eee": {
"value1": "v1",
"value2": "v2"
},
"fff": {
"value1": "v1",
"value2": "v2"
}
}
}
预期结果:
{
"first_key" : {
"timestamp": 1382461861,
"value": {
"aaa": {
"value1": "v1",
"value2": "v2"
},
"bbb": {
"value1": "v1",
"value2": "v2"
},
"ccc": {
"value1": "v1",
"value2": "v2"
}
}
},
"second_key": {
"timestamp": 138246330,
"value": {
"ddd": {
"value1": "v1",
"value2": "v2"
},
"eee": {
"value1": "v1",
"value2": "v2"
},
"fff": {
"value1": "v1",
"value2": "v2"
}
}
}
}
我尝试了很多组合,但结果 none 有我预期的附加键。我也是使用 jq 的新手,所以如果您能告诉我应该使用的命令,我将不胜感激。谢谢。
尝试以下方法之一:
jq --slurp '{first_key:.[0], second_key:.[1]}' file1 file2
jq --null-input '{first_key:input, second_key:input}' file1 file2
jq --null-input '[inputs] | {first_key:.[0], second_key:.[1]}' file1 file2
jq --null-input --argfile f1 file1 --argfile f2 file2 '{first_key:$f1, second_key:$f2}'
jq --null-input --argjson f1 "$(<file1)" --argjson f2 "$(<file2)" '{first_key:$f1, second_key:$f2}'
jq --null-input --slurpfile f1 file1 --slurpfile f2 file2 '{first_key:$f1[0], second_key:$f2[0]}'
jq --null-input --slurpfile f <(cat file1 file2) '{first_key:$f[0], second_key:$f[1]}'
备注
--slurp
可以简写为-s
--null-input
可以简写为-n
--argfile
已弃用,取而代之的是 --slurpfile
我有 2 个 json 文件,想将它们合并到一个唯一的文件中,但有额外的键,例如“first_key”和“second_key”
这里是文件内容:
文件 1
{
"timestamp": 1382461861,
"value": {
"aaa": {
"value1": "v1",
"value2": "v2"
},
"bbb": {
"value1": "v1",
"value2": "v2"
},
"ccc": {
"value1": "v1",
"value2": "v2"
}
}
}
文件 2
{
"timestamp": 138246330,
"value": {
"ddd": {
"value1": "v1",
"value2": "v2"
},
"eee": {
"value1": "v1",
"value2": "v2"
},
"fff": {
"value1": "v1",
"value2": "v2"
}
}
}
预期结果:
{
"first_key" : {
"timestamp": 1382461861,
"value": {
"aaa": {
"value1": "v1",
"value2": "v2"
},
"bbb": {
"value1": "v1",
"value2": "v2"
},
"ccc": {
"value1": "v1",
"value2": "v2"
}
}
},
"second_key": {
"timestamp": 138246330,
"value": {
"ddd": {
"value1": "v1",
"value2": "v2"
},
"eee": {
"value1": "v1",
"value2": "v2"
},
"fff": {
"value1": "v1",
"value2": "v2"
}
}
}
}
我尝试了很多组合,但结果 none 有我预期的附加键。我也是使用 jq 的新手,所以如果您能告诉我应该使用的命令,我将不胜感激。谢谢。
尝试以下方法之一:
jq --slurp '{first_key:.[0], second_key:.[1]}' file1 file2
jq --null-input '{first_key:input, second_key:input}' file1 file2
jq --null-input '[inputs] | {first_key:.[0], second_key:.[1]}' file1 file2
jq --null-input --argfile f1 file1 --argfile f2 file2 '{first_key:$f1, second_key:$f2}'
jq --null-input --argjson f1 "$(<file1)" --argjson f2 "$(<file2)" '{first_key:$f1, second_key:$f2}'
jq --null-input --slurpfile f1 file1 --slurpfile f2 file2 '{first_key:$f1[0], second_key:$f2[0]}'
jq --null-input --slurpfile f <(cat file1 file2) '{first_key:$f[0], second_key:$f[1]}'
备注
--slurp
可以简写为-s
--null-input
可以简写为-n
--argfile
已弃用,取而代之的是--slurpfile