コマンドでjsonを整形してくれるjqを触ってみた

jsonをコマンドで整形してくれる「[jq](https://stedolan.github.io/jq/)」というライブラリをインストールしたので、使ってみた。

####・インストール
```bash
$brew install jq
```
(Homebrewが入っていることが前提)

####・サンプルで使うjsonデータの作成
Qiitaのユーザーを取得するAPIをcurlコマンド経由で叩き、json形式で帰ってきた値を、sample.jsonとしてファイルに書き込む。

```bash
$curl "https://qiita.com/api/v2/users" >> sample.json
```
この時点で人間にとってはsample.jsonは大変みえづらい。

そこでjqを使ことで、大変みやすい結果が返ってくる。

```bash
$jq 位置 対象ファイル
```

このような感じで使い、「.」は「ルート（起点）」を示している。

```json:sample.json
$jq . sample.json
[
  {
    "description": null,
    "facebook_id": null,
    "followees_count": 0,
    "followers_count": 0,
    "github_login_name": null,
    "id": "fayyaztravelsagents",
    "items_count": 0,
    "linkedin_id": null,
    "location": null,
    "name": "",
    "organization": null,
    "permanent_id": 391667,
    "profile_image_url": "https://secure.gravatar.com/avatar/f46f3067bb8a4c083a7df432b9d81e21",
    "team_only": false,
    "twitter_screen_name": null,
    "website_url": null
  },
  {
    "description": null,
    "facebook_id": null,
    "followees_count": 0,
    "followers_count": 0,
    "github_login_name": null,
    "id": "choromoge",
    "items_count": 0,
    "linkedin_id": null,
    "location": null,
    "name": "",
    "organization": null,
    "permanent_id": 391666,
    "profile_image_url": "https://pbs.twimg.com/profile_images/1104530401689649152/TlyK64tT_bigger.jpg",
    "team_only": false,
    "twitter_screen_name": "choromoge",
    "website_url": null
  },
~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~~~~~~~

```
位置の指定の仕方だが、

例えば一番最初の要素だけ取得したいときは、

```bash
$jq '.[0]' sample.json
{
  "description": null,
  "facebook_id": null,
  "followees_count": 0,
  "followers_count": 0,
  "github_login_name": null,
  "id": "fayyaztravelsagents",
  "items_count": 0,
  "linkedin_id": null,
  "location": null,
  "name": "",
  "organization": null,
  "permanent_id": 391667,
  "profile_image_url": "https://secure.gravatar.com/avatar/f46f3067bb8a4c083a7df432b9d81e21",
  "team_only": false,
  "twitter_screen_name": null,
  "website_url": null
}
```

map , selectを使えば、「followees_countが0ではないもの」など条件を指定して取得できる。

```bash
$jq 'map(select( .["followees_count"] != 0))' sample.json
[
  {
    "description": null,
    "facebook_id": null,
    "followees_count": 1,
    "followers_count": 0,
    "github_login_name": null,
    "id": "h123nari",
    "items_count": 0,
    "linkedin_id": null,
    "location": null,
    "name": "",
    "organization": null,
    "permanent_id": 391654,
    "profile_image_url": "https://lh6.googleusercontent.com/-pvv7OL_Z3XE/AAAAAAAAAAI/AAAAAAAAAAA/ACHi3rcsrCQFPAA8lKeLvSBIQ8bQbE20sA/s50-mo/photo.jpg",
    "team_only": false,
    "twitter_screen_name": null,
    "website_url": null
  }
]
```

以下のようにlengthを使うと、配列の長さを取得することができる。

```bash
$jq length sample.json
20
```

返ってきたjsonのprofile_image_urlだけを取得したいときは、フィルタを使って、中身を取り出す。
今回は一番外側の[]で囲まれていおるので、以下のような形で繋げることで取得可能。

```bash
$jq '.[].profile_image_url' sample.json
"https://secure.gravatar.com/avatar/f46f3067bb8a4c083a7df432b9d81e21"
"https://pbs.twimg.com/profile_images/1104530401689649152/TlyK64tT_bigger.jpg"
"https://pbs.twimg.com/profile_images/878493232459530240/8ixPld_R_bigger.jpg"
"https://avatars3.githubusercontent.com/u/13102911?v=4"
"https://secure.gravatar.com/avatar/ceb59252761edd1ca738203456608b08"
"https://lh5.googleusercontent.com/-7Y71rhszW7s/AAAAAAAAAAI/AAAAAAAAAAA/ACHi3rd4YaxenfXntH6xT2mCvtYUmox7Uw/s50-mo/photo.jpg"
"https://secure.gravatar.com/avatar/f3a2ee49ba5fd70ad74aede68d374007"
"https://avatars3.githubusercontent.com/u/49073664?v=4"
"https://secure.gravatar.com/avatar/5e03f33f40a0f6a3d1cd7fec8749b0c0"
"https://lh3.googleusercontent.com/-0rpcKNPaqUk/AAAAAAAAAAI/AAAAAAAAAAA/ACHi3recDUcbPkoaI0HvfoMzmLfi3NHFiQ/s50-mo/photo.jpg"
"https://secure.gravatar.com/avatar/ae407bc1f9cb4b98a9ab5b86a4292e40"
"https://pbs.twimg.com/profile_images/1110050524542337025/Hzu5TYIC_bigger.png"
"https://lh4.googleusercontent.com/-tLUXKXlXdT0/AAAAAAAAAAI/AAAAAAAAA8E/sjsp3Lsv30A/s50/photo.jpg"
"https://lh6.googleusercontent.com/-pvv7OL_Z3XE/AAAAAAAAAAI/AAAAAAAAAAA/ACHi3rcsrCQFPAA8lKeLvSBIQ8bQbE20sA/s50-mo/photo.jpg"
"https://lh5.googleusercontent.com/-frhuFpc3JPY/AAAAAAAAAAI/AAAAAAAAAAA/ACHi3rfIB5liGo-BCakV-8_ukfNnp_cpPA/s50-mo/photo.jpg"
"https://secure.gravatar.com/avatar/0952fdbabfd5a101c3bd421f9a80ffdb"
"https://secure.gravatar.com/avatar/f948bdc3064df4db9065af979e927bc3"
"https://secure.gravatar.com/avatar/8bf410e0a3850e8f7c223a3170845050"
"https://lh3.googleusercontent.com/-XutSRgBKLFs/AAAAAAAAAAI/AAAAAAAB6Vk/-7AuP5QkT3k/s50/photo.jpg"
"https://pbs.twimg.com/profile_images/1116276459/__________bigger.jpg"
```