@kyanny's blog

My thoughts, my life. Views/opinions are my own.

jq で条件にマッチするデータ構造だけ出力する

$ curl http://b.hatena.ne.jp/entry/json/?url=http://localhost/ | \
  jq '.bookmarks[] | if .user == "otsune" then . else empty end'
{
  "tags": [],
  "user": "otsune",
  "timestamp": "2013/02/26 16:43:11",
  "comment": ""
}
  • bookmarks というキーに Array で各ユーザーのブックマーク情報が入っているので .bookmarks[] フィルタで抜き出す
  • | でフィルタをチェインさせる
  • if-then-else でマッチさせたい条件を記述する。条件判定部のフィルタはブックマーク情報を表すオブジェクトのコンテキストで評価されるので .user のように指定する
  • マッチしたものをフィルタリングせず全部出力するには単に . フィルタを指定する
  • if-then-else は else 節が必須だがマッチしない場合は何も出力しなくてよいので empty を使う。空文字列などを指定するのに比べて無駄な出力を減らせる