一尘不染

jq和bash:从变量制作JSON数组

json

我正在使用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答案的接受。


阅读 274

收藏
2020-07-27

共1个答案

一尘不染

jq完全按照您的指示去做。jq不是用于生成JSON的程序,而是用于查询JSON的工具。您对-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的要求。

2020-07-27