Bash 如何使用jq向根JSON对象添加JSON字段

Bash 如何使用jq向根JSON对象添加JSON字段,bash,jq,Bash,Jq,我正在尝试创建以下JSON对象结构: { "hard-coded-value": false, "dynamic-value-1": true, "dynamic-value-2": true, "dynamic-value-3": true } 我的动态值数组称为动态值 我编写了以下bash代码: DYNAMIC_VALUES=("dynamic-value-1" "

我正在尝试创建以下JSON对象结构:

{
  "hard-coded-value": false,
  "dynamic-value-1": true,
  "dynamic-value-2": true,
  "dynamic-value-3": true
}
我的动态值数组称为动态值

我编写了以下bash代码:

DYNAMIC_VALUES=("dynamic-value-1" "dynamic-value-2" "dynamic-value-3")

JSON_OBJECT=$( jq -n '{"hard-coded-value": false}' )

for i in "${DYNAMIC_VALUES[@]}"
do
    JSON_OBJECT+=$( jq -n \
                      --arg key "$i" \
                      '{($key): true}' )
done

echo $JSON_OBJECT
上面的代码打印以下内容

{ "hard-coded-value": false }{ "dynamic-value-1": true }{ "dynamic-value-2": true }{ "dynamic-value-3": true }

我想要的是这个输出看起来像这个问题顶部概述的输出,但是我不知道如何告诉jq附加到根JSON对象,而不是创建一堆对象。

这里不需要循环

$dynamic_values='dynamic-value-1''dynamic-value-2''dynamic-value-3' $printf'%s\n'${dynamic_values[@]}|jq-nR'{hardcoded_value:false}|。[输入]=true' { 硬编码的_值:false, dynamic-value-1:正确, dynamic-value-2:正确, dynamic-value-3:正确 } 如果其中一个数组元素包含换行符,则此操作将中断。对于这个问题,jq1.6有-args,它可以如下所示使用

$ dynamic_values=('dynamic-value-1' $'dynamic-value-2\n' 'dynamic-value-3')
$ jq -n '{hardcoded_value: false} | .[$ARGS.positional[]] = true' --args "${dynamic_values[@]}"
{
  "hardcoded_value": false,
  "dynamic-value-1": true,
  "dynamic-value-2\n": true,
  "dynamic-value-3": true
}

你不需要一个循环

$dynamic_values='dynamic-value-1''dynamic-value-2''dynamic-value-3' $printf'%s\n'${dynamic_values[@]}|jq-nR'{hardcoded_value:false}|。[输入]=true' { 硬编码的_值:false, dynamic-value-1:正确, dynamic-value-2:正确, dynamic-value-3:正确 } 如果其中一个数组元素包含换行符,则此操作将中断。对于这个问题,jq1.6有-args,它可以如下所示使用

$ dynamic_values=('dynamic-value-1' $'dynamic-value-2\n' 'dynamic-value-3')
$ jq -n '{hardcoded_value: false} | .[$ARGS.positional[]] = true' --args "${dynamic_values[@]}"
{
  "hardcoded_value": false,
  "dynamic-value-1": true,
  "dynamic-value-2\n": true,
  "dynamic-value-3": true
}
啊,我完全错过了手册中的-args选项-谢谢!有没有办法在数组中的每个元素前加一个字符串?类似于-args run-${dynamic_values[@]}来生成run-dynamic-value-1、run-dynamic-value-2等。我拥有的循环的优点之一是能够通过执行-arg key run-$I来预先结束字符串。@Dan-args${dynamic_values[@]//run-}啊,我完全错过了手册中的-args选项-谢谢!有没有办法在数组中的每个元素前加一个字符串?类似于-args run-${dynamic_values[@]}来生成run-dynamic-value-1、run-dynamic-value-2等。我所拥有的循环的优点之一是能够通过执行-arg key run-$I来预结束字符串。@Dan-args${dynamic_values[@]//run-}