スポンサーリンク
linuxのCLI上でjsonを扱うためには欠かせないjqコマンド。しかし出力がjson形式に縛られるので困るという方がいらっしゃるのではないでしょうか。
実を言うとjqではjson以外も出力できます。
今回はそのやり方をメモしていきたいと思います。
jqコマンドがインストールされているlinux環境ならばだいたいOKだと思われます
CentOS系にインストールする場合はこちらの記事: CentOS7に15秒でjqコマンドをインストールするをどうぞ。
以下のようなjsonの入力値を例に説明します。
# cat json.txt | jq "."
{
"users": [
{
"name": "Mura",
"age": 30
},
{
"name": "Ken",
"age": 29
}
]
}
上記のjsonを元に以下の文を出力します。
Mura is 30 years old
Ken is 29 years old
早速ですがやり方です。
コマンド
cat json.txt | jq '.users[] | .name = .name + " is " + (.age|tostring) + " years old" | .name'
結果
"Mura is 30 years old"
"Ken is 29 years old"
できました。
ポイントは2点あります。
+
を使うことで文字列を変更するtostring
を使い数値型を文字列型に変更するそれぞれ詳細を解説します。
説明しているのは
.name = .name + " is " + (.age|tostring) + " years old"
の部分です。
ここの意味は name というキーの値(=Mura と Ken)に対して "is " と (.age|tostring) と "years old" という文字を結合する という意味です。
ここで結合してできた新しい .name
を最後に表示しているわけです。
次は以下の部分の説明です。
(.age|tostring)
これは キー age
のvalue、つまり 30
と 29
を文字列に変換するということです。
jqには型が存在しており、数値型のまま結合しようとすると
jq: error (at <stdin>:1): string ("Mura is ") and number (30) cannot be added
というように怒られてしまいます。
以上、jqコマンドのちょっと便利な使い方でした。
スポンサーリンク