jq 不适用于包含变量破折号的键



如果您希望JQ逃脱破折号,则需要在类似的方括号之间放置钥匙;

jq '.["key-key"]'

除此之外,如果您想在JQ中包含一个变量,则需要使用双引号而不是单引号;

jq "."${var[i+1]}""

但是我的变量在其中包含破折号,在这种情况下,我试图合并上面的两个示例,但它不起作用;

var=key-key
jq ".["${var[i+1]}"]."key""

我如何才能完成此工作?

更新:

这是最终脚本,我忘了提到;

declare -a var=(
    "key-key"
    "key2-key2"
    "key3-key3"
)
for ((i=0; i<${#var[@]})); do
    curl -s "url" | jq ".["${var}"]."something""
done

在您包含在双引号中的jq命令中具有双重报价

jq ".["key-key"]"

最终命令的另一个问题是${var[i+1]}扩展到空字符串,因为该语法用于索引数组的元素,并且您以前将var定义为简单的字符串。

jq命令中使用变量的更好方法是通过--arg name value选项定义它们,然后您可以在单引号包含的命令中使用$foo 参考它们:

jq --arg keyName key-key '.[$keyName]'

要修复更新中包含的代码,我将使用以下内容:

declare -a var=(
    "key-key"
    "key2-key2"
    "key3-key3"
)
json=$(curl -s "url")
for searchedKey in "${var[@]}"; do
    echo $json | jq --arg keyName $searchedKey '.[$keyName].something'
done

最新更新