Bashシェルスクリプトで連想配列をJSONに変換し出力する方法
はじめに
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
などのようなツールを使ったほうが、集合を操作できるしロジックは簡潔ですし。
ディスカッション
コメント一覧
まだ、コメントがありません