我正在尝试用另一个文档中具有相应键的对象的值替换原始 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 aout_a.json 以获取其他 key 和输出文件。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!