Json 在bash中用数组替换键
示例json文件Json 在bash中用数组替换键,json,bash,jq,Json,Bash,Jq,示例json文件payload.json.tpl: { "foo": "bar", "x": { "y": "${array}" } } 我在bash中有一个数组 array=("one" "two" "three") 如何运行jq命令将键.x.y替换为[“一”、“二”、“三”] 因此,最终的json将是: { "foo": "bar", "x": { "y": ["one", "two", "three"] } } 与此类似,也适用于jq
payload.json.tpl
:
{
"foo": "bar",
"x": {
"y": "${array}"
}
}
我在bash中有一个数组
array=("one" "two" "three")
如何运行jq命令将键.x.y
替换为[“一”、“二”、“三”]
因此,最终的json将是:
{
"foo": "bar",
"x": {
"y": ["one", "two", "three"]
}
}
与此类似,也适用于jq<1.6:
< payload.json.tpl jq --arg a "${array[*]}" '.x.y=($a|split(" "))'
注意使用了${array[*]}
而不是${array[@]}
。使用*
时,${array}
的元素将作为单个字符串而不是多个字符串传递
使用
$ARGS.positional
(需要jq 1.6)
必须注意的是,这对元素本身包含空格的数组不起作用,这是首先在空格分隔的字符串上使用shell数组的主要原因。(尽管您可以使用任何元素中都没有出现的分隔符来构造字符串。)没有使用分隔符来声明数组;这就是重点。将数组转换为绑定到
a
的单个字符串可能会带来问题。(我仍然认为,如果一个人坚持使用较旧版本的jq
,这个答案是有用的,但缺点仍然需要承认。)是的,我在发表评论后意识到了这一点。谢谢这里的反馈!!
$ array=("one" "two" "three")
$ jq '.x.y = $ARGS.positional' payload.json.tpl --args "${array[@]}"
{
"foo": "bar",
"x": {
"y": [
"one",
"two",
"three"
]
}
}