如何使用jq将命令行中的bash数组转换为json数组?

如何使用jq将命令行中的bash数组转换为json数组?
$ jq -c -n -e '[$x, $y]' --argjson x '"a"' --argjson y '"b"'
["a","b"]

我知道我可以做上面这样的事情。如果我想从 bash 数组生成一个 json 数组,如下所示。有没有办法用任意长度的参数来做到这一点?

$ jq {some jq arguments} a b c # the bash array can be of an arbitrary length.
["a","b","c"]

注意 a、b、c 没有在命令行中引用,因为我希望输入简单。

答案1

有两种主要方法可以从任意字符串列表创建有效的 JSON 数组。一种是使用jq它的--args选项:

jq -c -n '$ARGS.positional' --args "${mylist[@]}"

或者,如果元素不被编码为字符串(例如,它们可以是纯数字,或者之前准备好的 JSON 字符串或整个 JSON 对象),

jq -c -n '$ARGS.positional' --jsonargs "${mylist[@]}"

请注意,--argsand--jsonargs及其参数必须是 命令行上的最后一个内容jq

我正在使用-n禁用读取任何外部输入并-c以“紧凑”输出格式创建 JSON,如问题所示。

另一种方法是使用jo,这是一个专门为在命令行上轻松生成 JSON 而设计的工具:

jo -a "${mylist[@]}"

-ajo给定参数生成数组的选项。

jo工具推断对象本身的类型,因此像这样的列表

mylist=(1 2 3 4 5 b)

将被转换成 JSON 数组

[1,2,3,4,5,"b"]

相关内容