在 bash 中声明 JSON 有点烦人,因为你必须转义很多字符。
假设我有一个像这样的数组:
value1="foo"
value2="bar"
arr=("key1" "$value1" "key2" "$value2")
有没有办法以某种方式用“:”和“,”字符连接数组。
我唯一能想到的是一个循环,您可以在其中添加正确的字符,如下所示:
data="";
for i in "${arr[@]}"; do
data="$data\"$i\""
done
答案1
和jo
,这使得在命令行上生成 JSON 变得很容易:
$ jo -p key1="$value1" key2="$value2"
{
"key1": "foo",
"key2": "bar"
}
或者,取决于您想要的最终结果,
$ jo -a -p "$(jo key1="$value1")" "$(jo key2="$value2")"
[
{
"key1": "foo"
},
{
"key2": "bar"
}
]
请注意,还将正确编码字符串和jo
中的值。$value1
$value2
答案2
和perl
:
$ perl -MJSON -e 'print JSON->new->pretty(1)->encode({@ARGV})' -- "${arr[@]}"
{
"key2" : "bar",
"key1" : "foo"
}
答案3
事实证明,heredoc 可能是声明动态 JSON 的最佳方式,但在开发以下内容时我并不知道该技术。
这是一种解决方案,像这样使用它:
join_arry_to_json a b c d
{"a":"b","c":"d"}
这只适用于字符串,不适用于数字或布尔值。现在要声明布尔值或数字,请使用以下^
符号:
ql_join_arry_to_json a ^3 b ^true c dog
产量:
{"a":3,"b":true,"c":"dog"}
代码在这里: https://gist.github.com/ORESoftware/a4e3948b0ce9c22752c759d7e694c9ab