0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

jq を使ってコマンドラインで JSON を加工する

Last updated at Posted at 2025-11-11

今回はjq コマンドの簡単な使い方についてご説明します。
jq コマンドを使うと、 JSON データを sedawk 等のコマンドと連携するのが容易になります。

jq の使用例

jq 公式サイトの Tutorial に、 GitHub の JSON API を操作する例が記載されています。

なお、筆者の方でもいくつか例を書いてみました。良かったら参考にしてみてください。

例1: コミット履歴から最新5件のメッセージを表示する。

curl -s https://api.github.com/repos/jqlang/jq/commits?per_page=5 \
    | jq -r '.[].commit.message | split("\n")[0]'

# 出力結果は以下の通り。
#
#     jq.test: drop non-portable %F test (#3365)
#     Update jq documentation for jq 1.8.1 release
#     Update signatures of 1.8.1 (#3364)
#     Update NEWS.md and AUTHORS for 1.8.1 (#3353)
#     build(deps): bump pyyaml from 6.0.1 to 6.0.2 in /docs (#3363)

ポイント

  • パイプ : |
    • 左側の出力を右側の入力として扱います。(Unix のパイプと同様です。)
    • コミットメッセージを split() で処理するため、パイプで繋いでいます。
  • 文字列を配列に分割する : split()
    • コミットコメントを改行で分割し、先頭行だけを取り出しています。

例2 コミット履歴を CSV に変換する。

curl -s https://api.github.com/repos/jqlang/jq/commits?per_page=5 \
    | jq -r '.[].commit | [.author.date, .tree.sha[0:8], (.message | split("\n")[0])] | @csv'

# 出力結果は以下の通り。
#
#     "2025-07-04T16:25:28Z","c84b2cc8","jq.test: drop non-portable %F test (#3365)"
#     "2025-07-01T11:54:28Z","255fef92","Update jq documentation for jq 1.8.1 release"
#     "2025-07-01T11:50:42Z","547d8784","Update signatures of 1.8.1 (#3364)"
#     "2025-07-01T10:36:14Z","d1a25f4b","Update NEWS.md and AUTHORS for 1.8.1 (#3353)"
#     "2025-07-01T10:29:37Z","a6da73f6","build(deps): bump pyyaml from 6.0.1 to 6.0.2 in /docs (#3363)"

ポイント

  • 文字列や配列から一部を切り取る(substring, slice) : [<number>:<number>]
    • 例えば [0:8] は、先頭から8文字(または8つ目までの要素)を切り取ります。
    • ハッシュの先頭8文字を取得するのに使っています。
  • 値を配列に変換する : [] で囲む
    • [] で囲むと、囲まれた値が配列になります。
    • 「コミット日時、ハッシュ、メッセージ」を配列に変換しています。
  • 配列をCSVに変換する : @csv
    • 配列を CSV に形式に変換します。

おまけ: jq と似たライブラリ

JSON を変換するライブラリは jq だけではなく、いくつか存在します。

AWS CLI を使っている方は JMESPath のお世話になっている方も多いのではないでしょうか。これは AWS CLI の --query オプションで使えるもので、 AWS コマンドから取得した JSON を加工するのに便利なものです。(※なお JMESPath の文法は jq とは異なりますのでご注意ください。)

これ以外にも JSON Query, JSONiq といったライブラリも存在しています。

まとめ

JSON を加工するのに便利な jq コマンドについてご説明しました。

jq で JSON を加工すると、sed, awk を始めとする他のコマンドと連携するのが容易になります。

jq 以外にも類似したライブラリが存在しますが、それらの文法は違うものになっています。
AWS CLI を使う方は JMESPath の文法を覚えておくと便利です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?