TAKEO

TAKEO

jqコマンドを使い方集

jqはJSONデータを操作するためのコマンドラインツールです。以下に基本的な使用例をいくつか紹介します。

1. JSONデータの整形(Pretty Print)

jqを使うと、JSONデータを見やすく整形することができます。

Copied!!
echo '{"name": "Alice", "age": 25, "city": "Tokyo"}' | jq
出力
Copied!!
{
  "name": "Alice",
  "age": 25,
  "city": "Tokyo"
}

2. 特定のキーの値を抽出

JSONデータから特定のフィールドだけを取り出す場合に使います。

Copied!!
echo '{"name": "Alice", "age": 25, "city": "Tokyo"}' | jq '.name'
出力
Copied!!
"Alice"

3. ネストされたデータの操作

ネストされたJSONデータの場合、ドットでつなげてアクセスできます。

Copied!!
echo '{"user": {"name": "Alice", "age": 25}}' | jq '.user.name'
出力
Copied!!
"Alice"

4. 配列の要素を取得

JSON配列のデータを扱うことも簡単です。以下の例では、最初の要素を取得しています。

Copied!!
echo '[{"name": "Alice"}, {"name": "Bob"}, {"name": "Charlie"}]' | jq '.[0].name'
出力
Copied!!
"Alice"

5. 条件付きでデータをフィルタリング - select

条件を指定してデータをフィルタリングすることも可能です。

Copied!!
echo '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]' | jq '.[] | select(.age > 25)'
出力
Copied!!
{
  "name": "Bob",
  "age": 30
}

6. 複数フィールドの出力

複数のフィールドを同時に表示したい場合、{}を使います。

Copied!!
echo '{"name": "Alice", "age": 25, "city": "Tokyo"}' | jq '{name, city}'
出力
Copied!!
{
  "name": "Alice",
  "city": "Tokyo"
}

7. データの加工・変更

jqを使ってJSONデータを変更することもできます。

Copied!!
echo '{"name": "Alice", "age": 25}' | jq '.age += 1'
出力
Copied!!
{
  "name": "Alice",
  "age": 26
}

mapの使用例

1. 配列内の各要素を変換する

配列の各要素に処理を適用して、新しい配列を作成します。

各要素に対して1を加算する場合:

Copied!!
echo '[1, 2, 3, 4]' | jq 'map(. + 1)'
出力
Copied!!
[2, 3, 4, 5]

2. 配列のオブジェクトの特定のフィールドを取り出す

オブジェクトの配列から特定のフィールドだけを取り出す場合に使えます。

nameフィールドだけを取り出す場合:

Copied!!
echo '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]' | jq 'map(.name)'
出力
Copied!!
["Alice", "Bob"]

3. 条件付きで値を変換する

mapを使って、条件を満たす要素だけを変換することが可能です。

年齢が30以上のユーザーのageフィールドを+1する場合:

Copied!!
echo '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]' | jq 'map(if .age >= 30 then .age += 1 else . end)'
出力
Copied!!
[
  {
    "name": "Alice",
    "age": 25
  },
  {
    "name": "Bob",
    "age": 31
  }
]

4. mapとselectを組み合わせる

selectと組み合わせることで、条件に合致した要素のみを変換した配列を作成することができます。

年齢が30以上の人の名前を抽出:

Copied!!
echo '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]' | jq 'map(select(.age >= 30) | .name)'
出力
Copied!!
["Bob"]

5. ネストされた配列の各要素にアクセス

ネストされた配列に対してmapを使うことで、さらにネストされた構造にアクセスできます。

ネストされた配列の中にあるscoreフィールドにアクセスして、すべての値を+10する場合:

Copied!!
echo '[{"name": "Alice", "scores": [80, 90]}, {"name": "Bob", "scores": [70, 85]}]' | jq 'map({"name": .name,"scores": .scores | map(. + 10)})'
出力
Copied!!
[
  {
    "name": "Alice",
    "scores": [90, 100]
  },
  {
    "name": "Bob",
    "scores": [80, 95]
  }
]