我正在尝试用另一个文档中具有相应键的对象的值替换原始 JSON 中键的值。
这是我的两个文件: 文件 1:
{
"-KaM0otlgWxXniYiacFe": {
"-LNxx1IiX6oYTxJ4IXx2": true
},
"-KlJTvbfonIMI_-YfS5R": {
"-LNxx1IbaB-yrZ623hrX": true
}
}
文件 2:
{
"-KaM0otlgWxXniYiacFe": {
"a": "-L-b__nH9PlMcz0stDDE",
"b": "-L7ZNKSZy570TlrQUzHM",
"c": "-Kaae3MsQUyViCKPs8Iv"
},
"-KlJTvbfonIMI_-YfS5R": {
"a": "-LAlXKfUUTdYDeCZH-u-",
"b": "-L7ZNKSTnob7w0HXjHr6",
" c": "-KYYicPD7VA9DEF_rus3"
}
}
目标是创建 3 个新文件,其中原始键已替换为每个文件中的 a、b 和 c 的值。
与“a”对比时的期望结果:
{
"-L-b__nH9PlMcz0stDDE": {
"-LNxx1IiX6oYTxJ4IXx2": true
},
"-LAlXKfUUTdYDeCZH-u-": {
"-LNxx1IbaB-yrZ623hrX": true
}
}
我试过使用类似的东西:
cat file1.json | jq --slurpfile file2 file2.json '| map(with_entries(.key = .file2[.key].a'
但我感觉很无能,因为我以前没有使用过 jq。
感谢任何帮助。
更新:
如何处理文件 2 中可能不存在文件 1 中的键,从而导致“无法使用 null (null) 作为对象键”的情况?
请您参考如下方法:
不是 jq 方面的专家,但这是我想出的:
jq --arg k a --argfile file2 file2.json 'with_entries(.key |= $file2[.][$k])' file1.json > out_a.json
更改 --arg k a
和 out_a.json
以获取其他 key 和输出文件。