配列を連結して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

関連情報