我正在使用 jq从变量值在 bash 中形成 JSON。
了解如何制作普通变量
$ VAR="one two three"
$ jq -n "{var:\"$VAR\"}"
{
"var": "one two three"
}
但还不能制作数组。我有
$ echo $ARR
one
two
three
想要得到类似的东西
{
"arr": ["one", "two", "three"]
}
我只设法得到像这样的乱码输出
$ jq -n "{arr: [\"$ARR\"]}"
{
"arr": [
"one\ntwo\nthree"
]
}
如何正确构造JSON数组? jq
能做到吗?
编辑:只有 jq 1.3 时才提出问题。现在,在 jq 1.4 中,可以直接执行我要求的操作,就像@JeffMercado 和@peak 建议的那样,为他们投票。不过,不会撤消对@jbr 的回答的接受。
最佳答案
在 jq 1.3 及更高版本中,您可以使用 --arg VARIABLE VALUE
命令行选项:
jq -n --arg v "$VAR" '{"foo": $v}'
即,--arg
将变量设置为给定值,这样您就可以在 jq 程序中使用 $varname
,现在您不必使用将 shell 变量插值到您的 jq 程序中。
编辑:从 jq 1.5 及更高版本开始,您可以使用 --argjson 直接传入数组,例如
jq -n --argjson v '[1,2,3]' '{"foo": $v}'
关于arrays - jq & bash : make JSON array from variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22434290/