连接数组以动态创建 JSON

连接数组以动态创建 JSON

在 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

相关内容