json - 将多个变量而不是文件传递给 jq 命令

标签 json shell jq

我在 shell 脚本中有两个变量,每个变量都包含一个 JSON 数据。

我想用命令合并它们

jq '.' $var1 $var2

哪里 echo $var1 => {"key1": "value1"}

echo $var2 => {"key2": "value2"}

但它不起作用,但是当我将这些变量的内容分别写入 file1 和 file2 时,它工作正常 jq '.'文件1.json 文件2.json 它工作得很好。 任何有关如何将多个变量传递给 jq 命令的帮助将不胜感激。

最佳答案

如果“合并”是指类似于 jq 的 add,那么您可以简单地写:

jq -n "$var1 + $var2"

更一般地说,如果您的 jq 支持 --argson 命令行选项,那么您可以使用它;否则,您可以使用 —arg,但需要注意进行任何所需的转换。在任何一种情况下,您可能还想使用 -n 命令行选项。

如果您使用的是 bash 等 shell,则另一组选项基于进程替换,例如

jq -s add <(echo "$var1") <(echo "$var2")

如果您的 echo 不合适,您可以使用其他替代方案(例如 printf)。

如果进程替换是矫枉过正,那么正如@chepner 指出的那样,另一种选择是简单地使用“$var1 $var2”,例如

jq -s add "$var1 $var2"

最后,如果 shell 变量已经导出(即,如果它们可用作“环境”变量),那么您可以使用 jq 的 env 函数:env.var1 + env。变量2

关于json - 将多个变量而不是文件传递给 jq 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47693714/

相关文章:

jq - 解析数组内的数组: Unwanted cartesian-product behavior

linux - 如何在亚马逊 EC2 实例上安装 jq

git - JQ - 如何定义过滤器以从输出数组中删除括号、引号和逗号

php json_decoding 与 xml 解析

shell - 如何从另一个文件的文件中删除特定内容?

bash - shell脚本中自动应答ssh-copy-id

linux - SUID 不适用于 shell 脚本

json - 如何将具有动态字段的 JSON 对象映射到 Go 结构

python - 值错误 : too many values to unpack when using itertuples() on pandas dataframe

java - Json/Gson 问题 - 为什么我的结果为空?