我有一个sample.json
内容如下:
{key:value}
我想要 AWS Secrets CLI 命令输出 ( secretstring json object
)
{
user:name,
pass:word
}
附加到我上面的 JSON 文件中,以便该文件现在变成
{
key:value,
user:name,
pass:word
}
我尝试过jq
,但它只是用命令输出覆盖我的 json 文件,并将\
引号作为转义字符。
答案1
假设您实际上正在处理 JSON 数据(问题中显示的字符串都不是有效的 JSON):
some-json-generating-command | jq -s add sample.json - | sponge sample.json
...some-json-generating-command
生成 JSON 输出的命令在哪里,并且sample.json
是您的 JSON 文档。
该管道将导致将jq
文件与管道左侧命令的输出一起读取到数组的两个单独元素中。然后它会使用指令合并这两个元素add
。然后生成的输出将被发送到 GNU sponge
,GNU 会将结果写回到sample.json
文件中(jq
无法进行就地编辑)。
测试:
$ jq -c . sample.json
{"key":"value"}
$ jq -c . command-output.json
{"user":"name","pass":"word"}
$ cat command-output.json | jq -s add sample.json - | sponge sample.json
$ cat sample.json
{
"key": "value",
"user": "name",
"pass": "word"
}
如果没有 GNU sponge
,请在文件的副本上运行管道sample.json
并将输出写入原始名称,然后在管道运行成功时删除临时文件:
cp sample.json sample.tmp
some-json-generating-command | jq -s add sample.tmp - >sample.json && rm -f sample.tmp