我正在使用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
编辑 :当只有jq 1.3时被问到问题。现在,在jq 1.4中,可以直接执行我要求的操作,例如@JeffMercado和@peak建议的操作。虽然不会撤销对@jbr答案的接受。
jq完全按照您的指示去做。jq不是用于生成JSON的程序,而是用于查询JSON的工具。您对-n交换机所做的只是将其用作漂亮的打印机。因此,如果要使用包含“一个”,“两个”,“三个”的数组打印对象,则必须生成它。
-n
VAR="one two three" VAR=$(echo $VAR | sed -e 's/\(\w*\)/,"\1"/g' | cut -d , -f 2-) echo "{var: [$VAR]}"
更新资料
正如Bryan)和其他人在下面提到的那样,确实可以用jq生成JSON,并且从1.4版本开始,甚至有可能直接执行OP的要求。