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
最常见的是通过三种方式之一向对象添加键和相应的值。
- 您将带有键和值的对象“添加”到现有对象,如您所示 (
. += { key: value }
),或者 - 您创建键并直接在现有对象中分配值 (
.key = value
),或者 - 如果您在使用 时巧妙地命名变量
--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
确保数字被解释为字符串。)