curl で取得した気象庁公式の天気予報の情報（JSON）を jqコマンドで処理する

この記事で書いている内容は、以下の記事を書いた際に使った「気象庁公式の天気予報の情報を curl で取得する方法」に関して、取得した情報に対する後処理を行ってみる話です。

●気象庁公式の天気予報の情報（JSON）を curl・Node.js で取得し Node.js での処理を試す - Qiita
　https://qiita.com/youtoy/items/932bc48b03ced5a45c71

具体的には [jqコマンド](https://stedolan.github.io/jq/)で JSON に対する処理を行います。

## jqコマンドを利用する
### Mac にインストールする
まずは、[jqコマンド](https://stedolan.github.io/jq/)が利用できるようにインストールを行います。

Mac で Homebrew を利用しているのであれば、以下の記事などにあるとおり `brew install jq` 実行するだけで OK です。

●HomeBrew で jqをインストールしてみる - 覚えたら書く
　https://blog.y-yuki.net/entry/2019/08/19/223000

### 表示の整形
まずは curl で取得した情報を、単に整形するだけの簡単な処理を試します。
[前回の記事](https://qiita.com/youtoy/items/932bc48b03ced5a45c71)で行った内容そのままです。

```bash
curl 'https://www.jma.go.jp/bosai/forecast/data/forecast/110000.json'
```

実行した結果は、以下の通りです。
![curlコマンドの出力そのまま.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/b423e9f0-5657-e92f-dd88-daaa11627fcd.jpeg)

今度は、jqコマンドと組み合わせます。
とは言ってもパイプでつなぐだけです。

```bash
curl 'https://www.jma.go.jp/bosai/forecast/data/forecast/110000.json' | jq
```

今度の出力結果は以下のようになります。
![jqコマンドを組み合わせた結果.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/8547bb82-1990-497f-a022-83da9f1b5681.jpeg)

### 取得結果の一部のみ取り出して表示する
[前回の記事](https://qiita.com/youtoy/items/932bc48b03ced5a45c71)では Node.js で行っていた処理を、jqコマンドで行ってみます。

```javascript
const response = await axios.get(`${url}${area}.json`);
for (const area of response.data[0].timeSeries[0].areas) {
  console.log(`----${area.area.name}----`);
  for (const weather of area.weathers) {
    console.log(weather);
  }
}
```

#### 特定要素のみを取得
まずは、上記の `response.data[0].timeSeries[0]` に該当する部分を取り出してみます。

```bash
curl 'https://www.jma.go.jp/bosai/forecast/data/forecast/110000.json' | jq .[0].timeSeries[0]
```

出力結果を確認してみます。
![一部のみを取り出す.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/51a826aa-4dab-76ec-5aad-0b422d4532ed.jpeg)

#### 配列内の特定の全要素を取得
さらに、Node.js で処理した時と少し違う出力になりますが、地域名の全てを取り出す処理を試します。

```bash
curl 'https://www.jma.go.jp/bosai/forecast/data/forecast/110000.json' | jq .[0].timeSeries[0].areas[].area.name
```

出力結果は以下の通りです。
![地域名のみ取り出す.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/f5258712-b3bd-c618-5812-efdb068b09b8.jpeg)

#### 配列内の特定の全要素を取得2
次は、天気を取り出します。

```bash
# 配列のまま取り出す
curl 'https://www.jma.go.jp/bosai/forecast/data/forecast/110000.json' | jq .[0].timeSeries[0].areas[].weathers
# 配列の中身を取り出す
curl 'https://www.jma.go.jp/bosai/forecast/data/forecast/110000.json' | jq .[0].timeSeries[0].areas[].weathers[]
```

上記のそれぞれの出力結果は以下のとおりです。

**配列のまま取り出した場合：**
![配列のまま取り出し.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/27a57860-6fe4-c311-abe6-65a583d9c8a9.jpeg)

**配列の中身を取り出した場合：**
![配列の中身を取り出す.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/30a6ebf1-d5e4-0eab-3211-08f5306f4336.jpeg)

#### 複数の要素を一度に取り出す
今度は、地域名と天気予報の情報の両方を一度に取り出してみます。

```bash
curl 'https://www.jma.go.jp/bosai/forecast/data/forecast/110000.json' | jq '.[0].timeSeries[0].areas[] | .area.name, .weathers[]'
```

出力結果は以下の通りです。
![地域名と天気予報の情報の両方を一度に取り出す.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/343196ed-e2a1-fc7c-d490-50f6ac405537.jpeg)

#### 検索を利用する
前回の記事にはなかったですが、中身の値を使った検索を試してみます。

```bash
curl 'https://www.jma.go.jp/bosai/forecast/data/forecast/110000.json' | jq '.[0].timeSeries[0].areas[] | select(.area.name == "秩父地方")'
```

以下のような出力が得られます
![検索.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/8fc5a3f2-19df-3d67-04f6-310bf280b3bf.jpeg)

#### 検索結果の中の特定要素を取り出す
このような組み合わせ方もできるようです。

```bash
curl 'https://www.jma.go.jp/bosai/forecast/data/forecast/110000.json' | jq '.[0].timeSeries[0].areas[] | select(.area.name == "秩父地方") | .weathers'
```

こちらが出力結果です。
![検索結果の一部のみを取り出す.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/3577c3ac-db86-eea5-2c18-b10582987f9a.jpeg)

## おわりに
jqコマンドを利用することで、JSON の情報をコマンドのみで取り出すことができました。

## 参考にした記事
●jqコマンドでjsonから必要なデータのみを取得する - Qiita
　https://qiita.com/buntafujikawa/items/a769ebabbdd324ff0d6f

●jqの使い方メモ - 新しいことにはウェルカム
　https://www.kwbtblog.com/entry/2020/11/19/034253

●jqコマンド(jsonデータの加工, 整形)の使い方 - わくわくBank
　https://www.wakuwakubank.com/posts/676-linux-jq/