arrays - jq & bash : make JSON array from variable

标签 arrays json bash jq

我正在使用 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/

相关文章:

java - 查找三个数组中至少两个数组中存在的数字

ios - 使用Swift将一些Class类型的Arraylist转换成JSON格式

java - Jackson 从一组 json 属性创建对象

linux - 在 Bash 中检测图形登录

c++ - C++二进制数字数组转换为int值

php - 向 mysql 中插入多行

json - 将 json 文件读取为 json 字符串并在 jsr223 采样器中提取数据,groovy 作为 jmeter 中的语言

python - 使用 python 或 bash 自动安装 Docker 和镜像拉取

bash - 如何使用 'kill' 结合 'grep' 终止进程

将数组的一部分复制到自身?