JSON形式のファイルを整形・集計したりするjqコマンドのインストールと使い方

JSON形式のファイルを整形・集計したりするjqコマンドのインストールと使い方

JSON形式のファイルをCSV形式に変換したり、整形・集計など色々加工したい場合にjqをいれておくと便利です。

インストールはこちらです。OSにおわせてダウンロードします。Windowsの場合はexeをダウンロードし、パスを通すだけです。以下に配置しパスを通します。

D:¥jq¥jq.exe

ファイルに対して|(パイプ)でjqコマンドを使います。

バージョンは-Vオプションです。

D:\jq>jq -V
jq-1.6

以下のJSONファイルがあります。

{
  "aa": [
    "bb",
    "cc"
  ],
  "dd": "ee",
  "ff": {
    "gg": "hh",
    "ii": "jj"
  }
}

ドットがルートと考えます。

D:¥jq>type sample.json | jq "."
{
  "aa": [
    "bb",
    "cc"
  ],
  "dd": "ee",
  "ff": {
    "gg": "hh",
    "ii": "jj"
  }
}

ドットにキーを付けてvalueを取得します。

D:¥jq>type sample.json | jq ".aa"
[
  "bb",
  "cc"
]

ドットにキーを付けてさらにドットにキーを付けてvalueを取得します。

D:¥jq>type sample.json | jq ".ff.gg"
"hh"

色々公式サイトを見ながら試すと集計したり加工したりすることができるようです。

基本的にはkeyに対してvalueを表示する、という感じです。keyはダブルクォーテーションで囲みます。

ダブルクォーテーションを消したい場合は-rオプションを使います。

D:¥jq> type sample.json | jq -r ".ff.gg"
hh

JSONの配列を操作する

JSONの配列を操作してみます。以下のsample.jsonというファイルがあるとします。

{
  "items": [
    {
      "price": 200,
      "item": "a"
    },
    {
      "price": 3000,
      "item": "b"
    }
  ]
}

配列を表示する

配列の添え字を省略すると全要素が表示されます。

D:¥jq>type sample.json | jq ".items[]"
{
  "price": 200,
  "item": "a"
}
{
  "price": 3000,
  "item": "b"
}

基底値は0なので、この辺はJavaなどと同じく[0]とすればその要素が取得できます。

D:¥jq>type sample.json | jq ".items[0]"
{
  "price": 200,
  "item": "a"
}

D:¥jq>type sample.json | jq ".items[1]"
{
  "price": 3000,
  "item": "b"
}

D:¥jq>type sample.json | jq ".items[2]"
null

範囲外の要素を指定すると、nullとなるようです。

addで集計する

あるvalueの集計をしたい場合にaddを使います。

D:¥jq>type sample.json | jq ".items[].price"
200
3000

このpriceの合計を求める場合にaddを使用します。一旦[]で囲って、配列にしてからaddします。

D:¥jq>type sample.json | jq "[.items[].price] | add"
3200

lengthで配列長を求める

lengthから配列長を求めることができます。

D:¥jq>type sample.json | jq "[.items[].price] | length"
2

maxで最大値を求める

maxから最大値を求めることができます。

D:¥jq>type sample.json | jq "[.items[].price] | max"
3000

minで最小値を求める

minから最小値を求めることができます。

D:¥jq>type sample.json | jq "[.items[].price] | min"
200

JSONの任意のプロパティを削除する

delを使えば、深い階層のプロパティを削除したりすることができます。

キーが特定できない場合は[]とすることによって、その階層のキーを任意とすることができます。

type a.json | jq 'del(.["items"][]["x-amazon-apigateway-integration"]

JSONファイルを文字列にする(Linux)

JSONファイルの整形をやめて1行の文字列に変換するには-cオプションを使用します。

$ cat a.json | jq -c
{"key1":"val1","key2":"val2"}

これを文字列に変換するにはパイプでjq -Rコマンドでつなぎます。

$ cat a.json | jq -c . | jq -R
"{\"key1\":\"val1\",\"key2\":\"val2\"}"

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

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