jq 命令中的 Unix shell 引用问题错误

jq 命令中的 Unix shell 引用问题错误

jq -n --arg KEY 'no leading zero' --arg VAL '.13452' '.+={$KEY:$VAL}'我正在bash 终端上尝试这个命令来产生输出{"no leading zero":".13452"}

但我收到以下错误:

jq: error: syntax error, unexpected ':', expecting '}' (Unix shell quoting issues?) at <top-level>, line 1:
.+={$KEY:$VAL}        
jq: error: May need parentheses around object key expression at <top-level>, line 1:
.+={$KEY:$VAL}    
jq: 2 compile errors

如何修复命令以便我{"no leading zero":".13452"}使用参数获得输出?

谢谢。

答案1

您可以使用字符串插值

jq -n --arg KEY 'no leading zero' --arg VAL '.13452' '{"\($KEY)":$VAL}'

产生

{
  "no leading zero": ".13452"
}

答案2

jq最常见的是通过三种方式之一向对象添加键和相应的值。

  1. 您将带有键和值的对象“添加”到现有对象,如您所示 ( . += { key: value }),或者
  2. 您创建键并直接在现有对象中分配值 ( .key = value),或者
  3. 如果您在使用 时巧妙地命名变量--arg,则可以简单地使用$ARGS.named并添加 ( . += $ARGS.named)。

在第一种情况下,当使用变量时,键将被视为要计算的表达式,这意味着它需要用括号括起来(错误消息直接暗示了这一事实):

. += { ($key): $value }

例如:

jq -n --arg key 'no leading zero' --arg value '.13452' '{ ($key): $value }'

(请注意,我们没有要添加的对象,因此. +=不需要)


在第二种情况下,您应该使用以下.[$key]语法:

.[$key] = $value

例如:

jq -n --arg key 'no leading zero' --arg value '.13452' '.[$key] = $value'

在第三种情况下,使用

. += $ARGS.named

例如:

jq -n --arg 'no leading zero' '.13452' '$ARGS.named'

(请注意,我们没有要添加的对象,因此. +=不需要)


您还可以使用jo,在这种情况下,这可以使语法更简单,或者至少是更短的命令:

jo -- -s 'no leading zero'=.13452

(这-s确保数字被解释为字符串。)

相关内容