【シェルスクリプト】JSONファイルを作成・書込みする方法|printf

プログラマのメモ帳

この記事では、シェルスクリプト(bashスクリプト)でJSONファイルを作成する方法を紹介しています。

JSONファイルを作成する方法はいくつかありますが、ここでは「printf」を使用した方法で作成します。

サンプルとして作成するJSONファイルは以下の2つです。
1.2つのキーをもつ簡単なJSONファイル(sample1.json)
2.自動でvalue値を書込むJSONファイル(sample2.json)

{
  "name": "nashizawa",
  "age": "27"
}
{
  "now":[
    {"time":"20:00"},
    {"time":"20:10"},
    {"time":"20:20"},
    {"time":"20:30"},
    {"time":"20:40"},
    {"time":"20:50"}
  ]
}
スポンサーリンク

Sample Code

2つのキーをもつ簡単なJSONファイルを作成する

# このシェルを実行する際には引数を2つとる
# $1:"name:"のvalue値
# $2:"age:"のvalue値

# keyを代入
keyName='"name":'
keyAge='"age":'

# keyとパラメータを変数に代入
nameJson="${keyName} \"$1\""
ageJson="${keyAge} \"$2\""

# printfでJSON形式でファイルにリダイレクトする
printf '{
  %s,
  %s
}' "${nameJson}" "${ageJson}"  > sample1.json

このシェルスクリプトでは2つのkeyである”name”と”age”のvalue値を引数としてパラメータで受け取っています。($1、$2)

そして、keyとvalueをそれぞれ1つの変数に代入してprintf'{ }’でリダイレクトしています。printf'{ }’の中では改行やスペースもそのまま書込むことができます。そのため、%sのパラメータにJSONファイルの情報を引数で渡してあげれば意図したJSONファイルを作成できます。

実行例

2.自動でvalue値を書き込んでJSONファイルを作成する

# このシェルを実行する際には引数を1つとる
# $1:現在時刻(UNIXタイム通算秒)

timeCount=6 # 1時間
jsonHead='{"time":'
LF=$'\n' # 改行文字

  # printfで書込むjsonContentsに全て連結して1つの文字列にする処理
  for((i=0; i<$timeCount; i++)); do
    jsonTime[i]=`echo $(($1+(600*i))) | awk '{print strftime("%H:%M", $1)}'`
    jsonContents+=${jsonHead}
    jsonContents+="\"${jsonTime[i]}\"}" # 変換した時刻データを連結
    if [ $i -lt $((timeCount - 1)) ]; then # 最終行を除く
      jsonContents+=",${LF}    " # 空白4つ含む(改行文字も連結)
    fi
  done

# printfでJSON形式でファイルにリダイレクトする
printf '{
  "now":[
    %s
  ]
}' "${jsonContents}" > sample2.json

このシェルスクリプトでは、引数で受け取った現在時刻に10分ずつ加算した時間をvalue値にしたJSONファイルを作成しています。

ポイントはカンマ、改行を含めて1つの文字列として変数に格納するということでしょうか。(今回はjsonContentsに全て連結して格納しています。)

これを応用すればいろいろなJSONファイルを作成することができそうです。

実行例

パラメータには1591441200(2020/06/06 20:00)を渡しています。

以上です。
参考になればうれしいです。

コメント

タイトルとURLをコピーしました