jq コマンド

公式サイト:

jq [Official]

ダウンロード

入手:

Download | jq [Official]

使い方

参考:

jq コマンドを使う日常のご紹介 – Qiita

整形された JSON 文字列を見たい時、minify したい時、jq コマンドがとても便利だったという話 | woshidan’s loose leaf

JSON on the Command Line with JQ | George Ornbo

導入

参考:

軽量 JSON パーサー JQ のドキュメント jq Manual をざっくり日本語訳してみました | DevelopersIO

JSON 処理コマンド jq を使ってみた | ユニキャストラボ

jq コマンドが強力すぎてヤバい件 | CUBE SUGAR STORAGE

JSON 処理コマンド jq を使ってみた | ユニキャストラボ

JQ という JSON プロセッサーがすばらしすぎる | シンク株式会社

jq コマンドが実は高性能すぎてビビッた話 – beatsync.net

JSON データを jq コマンドを使ってシュッと加工する | タダケンの Enjoy Tech

入門

参考:

API レスポンス等から欲しい情報だけを抽出する 初級編|DevelopersIO

API レスポンス等から欲しい情報だけを抽出する 中級編|DevelopersIO

API レスポンスから欲しい情報を抽出する 上級編|DevelopersIO

Reshaping JSON with JQ | Programming Historian

整形

参考:

JSON 整形コマンドラインツール JQ – Qiita

-s / --slurp オプション

プロパティを抜き出してオブジェクトの配列を作る。

$ echo '[
    { "a": "1", "b": "2", "c": "3" },
    { "a": "4", "b": "5", "c": "6" }
  ]' \
  | jq ".[] | { a, b }" | jq -s "."
[
  {
    "a": "1",
    "b": "2"
  },
  {
    "a": "4",
    "b": "5"
  }
]

オブジェクトをマージする。

$ echo '[
    { "a": "1", "b": "2", "c": "3" },
    { "d": "4", "e": "5", "f": "6" }
  ]' \
  | jq ".[]" | jq -s "add"
{
  "a": "1",
  "b": "2",
  "c": "3",
  "d": "4",
  "e": "5",
  "f": "6"
}

参考:

複数の JSON ファイルを JQ を使ってマージする | DevelopersIO

Creating an array from objects? · Issue #684 · stedolan/jq – GitHub

How to merge 2 JSON file using JQ? – Stack Overflow

-r オプション

  • --raw-output-r出力が文字列の場合に、引用符を除去して生の文字列を返す。

ドキュメント:

--raw-output – Manual | jq [Official]

参考:

How to convert embedded JSON string to JSON – Unix & Linux Stack Exchange

-S オプション

オブジェクトのプロパティをキーの順序でソートする。

参考:

sorts KEY and VALUES in different way – how can I enumerate them in the same order? – Stack Overflow

JQ should have an option not to sort keys · Issue #1364 · stedolan/jq – GitHub

-n オプション

参考:

JQ を使って平文の JSON をシェルコマンドだけでいい感じにエスケープする | コード日進月歩

reduce

オブジェクトの配列をマージして一つのオブジェクトにまとめる。

$ echo '[
    { "a": "1" },
    { "b": "2" },
    { "c": "3" }
  ]' \
  | jq "reduce .[] as \$obj ( {} ; . + \$obj )"
{
  "a": "1",
  "b": "2",
  "c": "3"
}

参考:

Merge objects into one · Issue #1016 · stedolan/jq – GitHub

add

参考:

Reducing JSON with JQ – Stack Overflow

del

オブジェクトから指定したプロパティを削除する。

$ echo '{ "a": "1", "b": "2", "c": "3" }' | jq "del(.a)"
{
  "b": "2",
  "c": "3"
}

階層をたどってプロパティを削除する。

$ echo '{
    "deep": { "a": "1", "b": "2", "c": "3" }
  }' \
  | jq "del(.deep.a)"
{
  "deep": {
    "b": "2",
    "c": "3"
  }
}

参考:

Deleting keys from objects? · Issue #323 · stedolan/jq – GitHub

Removing a key from parent object with JQ – Stack Overflow

map

map して作成したオブジェクトをマージして一つのオブジェクトにまとめる。

$ echo '[
    { "key": "a", "value": "1" },
    { "key": "b", "value": "2" }
  ]' \
  | jq "map({ (.key): (.value) }) | add"
{
  "a": "1",
  "b": "2"
}

参考:

QUESTION: A way to concatenate input objects into one · Issue #70 · stedolan/jq – GitHub

プロパティ (文字列) の連結

参考:

Concat 2 fields in JSON using JQ – Stack Overflow

プロパティを追加する

参考:

Add a new element to an existing JSON array using JQ – Stack Overflow

プロパティの値を変更する

  • |=
  • +=
  • -=
  • *=
  • /=
  • %=
  • //=
  • =

値を変更する。

$ echo '{
    "deep": { "a": "1", "b": "2", "c": "3" }
  }'   | jq ".deep.a |= \"101\""
{
  "deep": {
    "a": "101",
    "b": "2",
    "c": "3"
  }
}

ドキュメント:

Update-Assignment: |= | jq Manual [Official]

Arithmetic Update-Assignment: +=, -=, *=, /=, %=, //= | jq Manual [Official]

Plain Assignment: = | jq Manual [Official]

Complex Assignments | jq Manual [Official]

keys / values / to_entries

参考:

Extract keys using JQ | mheap

Handle large JSONs effortlessly with JQ | Leonid Shevtsov

How to use `jq` to obtain the keys – Stack Overflow

print key and value for each entry in an object – Stack Overflow

print key and value for all in sub-object – Unix & Linux Stack Exchange

sort_by

参考:

JQ で sort する – Qiita

Sorting JSON by Value with JQ | Big Datums

type

参考:

How to get root keys and key types using JQ – Stack Overflow

@uri

参考:

JQ を使って平文の JSON をシェルコマンドだけでいい感じにエスケープする | コード日進月歩

ビルトイン関数

参考:

builtin.jq – GitHub

as

値に名前を付けて変数として参照する。

... as $variable_name | ...

配列の要素の平均値を計算する。

$ echo "[4,6,8]" \
  | jq "length as \$length | add / \$length"
6

ドキュメント:

Variable / Symbolic Binding Operator: … as $identifier | … | jq Manual [Official]

参考:

jq print key and value for all in sub-object – Unix & Linux Stack Exchange

walk

参考:

How to add an object, key / value in a nested JSON tree with arrays – Stack Overflow

数字の文字列キー

数字の文字列キーを扱う際は、明示的に文字列のキーとしてアクセスする。

$ echo '{ "12345": { "foo": "Yay!" } }' | jq -r '.["12345"].foo'

参考:

Getting data from json when key is numerical string – Stack Overflow

大文字小文字を無視して判別したい

参考:

Case-Insensitive Search for Keys Containing String (ajorpheus) – GitHub Gist

case insensitive contains – Stack Overflow

Windows で使う

  • jq-win64.exe をダウンロードし、PATH の通った場所に配置し、jq.exe にリネームする。
  • または、Bash で jq としてエイリアスを作成する。

動画:

How to Use JQ in Git Bash (Pavan Devarakonda)

参考:

Git Bash で jq コマンドが使えない時の対処方法 – Qiita

Git Bash で jq コマンドを使用するための一番簡単な方法 – Qiita

Windows で jq コマンドを使いたい | サーバーワークスエンジニアブログ

Run jq command in Git Bash – Stack Overflow

How to run JQ from Git Bash? – Stack Overflow

エラー行を無視したい

参考:

jq で JSON パースできない行のエラーを無視する – Qiita

非 JSON の文字列が含まれるファイルに対して jq を使いたい | 理系学生日記

使用例/サンプル

Cookbook – stedolan/jq Wiki – GitHub

FAQ

FAQ – stedolan/jq Wiki – GitHub

ドキュメント

Manual | jq [Official]

リポジトリ

stedolan/jq: Command-Line JSON Processor – GitHub

まとめ

チートシート | Qoosky

JSON Tools JQ | Hyperpolyglot

Cheet Sheet – GitHub Gist

Tips

ドキュメント:

Advanced Topics – stedolan/jq Wiki – GitHub

リンク:

シェル芸で使いたい jq イディオム – Qiita

jq コマンドで覚えておきたい使い方 17個 | 俺的備忘録 なんかいろいろ

jq Recipes | Remy Sharp’s b:log

jq examples – reddit

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA