はじめに
Bashでは、 declare コマンドを利用して連想配列変数を宣言することが可能です。
シェル内で定義した連想配列をJSONに変換し出力したいと思いましたが、どのように記述したらよいか悩んだためまとめました。
検証環境
| |
事前準備
今回は、 jq コマンドを利用してJSON変換を実現してみたいと思います。
事前にインストールしておきましょう。
コードサンプル
事前に declare -A コマンドで宣言した連想配列に値を詰め込んでおき、 jq を使ってJSONオブジェクトに変換してみます。
| |
実行結果は以下のようになります。
| |
key1 、 key2 の値は数値ですので、出力されたJSONの値はダブルクォートで囲まれていません。
key4 の値は空となっていますので、空文字として出力されています。
jq の -c オプションは、JSONをワンライナーで出力させるオプションです。
ポイントは jq -n -R コマンドで、標準入力から受け取ったプレーンなテキスト情報のうち、奇数行の値( $i に格納される )をキー、偶数行の値( input に格納される )をバリューとして、reduceさせている点です。
{} は reduce の初期状態を表しています。
csvやテキストファイルのようなものにも適用できる
ロジックを見ての通り、奇数行にJSONオブジェクトのキー、偶数行にその値を出力していました。 つまり、同じロジックは連想配列ではないデータフォーマットにも適用できるわけです。
ひとこと
あんまり使うことないかな?と思いつつ。
csv2json などのようなツールを使ったほうが、集合を操作できるしロジックは簡潔ですし。