3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-11-06

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

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

具体的には jqコマンドで JSON に対する処理を行います。

jqコマンドを利用する

Mac にインストールする

まずは、jqコマンドが利用できるようにインストールを行います。

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

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

表示の整形

まずは curl で取得した情報を、単に整形するだけの簡単な処理を試します。
前回の記事で行った内容そのままです。

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

実行した結果は、以下の通りです。
curlコマンドの出力そのまま.jpg

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

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

今度の出力結果は以下のようになります。
jqコマンドを組み合わせた結果.jpg

取得結果の一部のみ取り出して表示する

前回の記事では Node.js で行っていた処理を、jqコマンドで行ってみます。

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] に該当する部分を取り出してみます。

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

出力結果を確認してみます。
一部のみを取り出す.jpg

配列内の特定の全要素を取得

さらに、Node.js で処理した時と少し違う出力になりますが、地域名の全てを取り出す処理を試します。

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

出力結果は以下の通りです。
地域名のみ取り出す.jpg

配列内の特定の全要素を取得2

次は、天気を取り出します。

# 配列のまま取り出す
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

配列の中身を取り出した場合:
配列の中身を取り出す.jpg

複数の要素を一度に取り出す

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

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

出力結果は以下の通りです。
地域名と天気予報の情報の両方を一度に取り出す.jpg

検索を利用する

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

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

以下のような出力が得られます
検索.jpg

検索結果の中の特定要素を取り出す

このような組み合わせ方もできるようです。

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

こちらが出力結果です。
検索結果の一部のみを取り出す.jpg

おわりに

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/

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?