質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

4374閲覧

気象庁HPから取得したJSONから任意の地域名・日時・天気の情報を取り出す方法

52kkp

総合スコア6

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/13 10:45

前提・実現したいこと

気象庁HPから取得したJSONを読みとり、指定した地域名での日時・天気の情報のみを出力したいです。
下記コードでは現状は全ての地域名・日時・天気の情報が表示されます。
どのように加筆修正すればよろしいでしょうか。

該当のソースコード

Python

1url = 'https://www.jma.go.jp/bosai/forecast/data/forecast/010000.json' 2filename = 'tenki.json' 3 4def job(): 5  import urllib.request as req 6  req.urlretrieve(url, filename) 7job() 8 9import json 10with open('tenki.json', 'r', encoding="UTF-8") as f: 11  data = json.load(f) 12for area in data: 13  name = area['name'] 14  print("[", name, "]") 15  for ts in area['srf']['timeSeries']: 16   times = [n for n in ts['timeDefines']] 17   if 'weathers' in ts['areas']: 18     for i,v in enumerate(ts['areas']['weathers']): 19       print(times[i], ":", v)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こういうので良いですか。

python

1url = 'https://www.jma.go.jp/bosai/forecast/data/forecast/010000.json' 2filename = 'tenki.json' 3place = '札幌' 4 5def job(): 6import urllib.request as req 7req.urlretrieve(url, filename) 8job() 9 10with open('tenki.json', 'r', encoding="UTF-8") as f: 11 data = json.load(f) 12 13selected_areas = [a for a in data if a['name'] == place] 14if selected_areas != []: 15 area = selected_areas[0] 16 name = area['name'] 17 print("[", name, "]") 18 for ts in area['srf']['timeSeries']: 19 times = [n for n in ts['timeDefines']] 20 if 'weathers' in ts['areas']: 21 for i,v in enumerate(ts['areas']['weathers']): 22 print(times[i], ":", v)

実行結果

python

1[ 札幌 ] 22021-05-13T17:00:00+09:00 : くもり 所により 夜遅く 霧 32021-05-14T00:00:00+09:00 : 晴れ 時々 くもり 所により 昼過ぎ から 夕方 雨 で 雷を伴う 42021-05-15T00:00:00+09:00 : 晴れ 時々 くもり

投稿2021/05/13 12:17

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

52kkp

2021/05/13 13:20

ご回答ありがとうございます。 詳細なコードまで書いていただきうれしいです。 読み解いて勉強させていただきます!
guest

0

こんばんは。

問題文読ませていただきました。

指定した地域名の選ばれ方にもよりますが、自分がターミナルから入力して地域名を指定する場合は、input関数を利用するとよさそうです。

  1. input関数で入力を受け入れる。
  2. pythonファイル内でinput関数の内容を取得する。
  3. 特定の地域名が見つかった場合、for文のname以降の処理を行い、print文にて出力する。

でいいかなと思います。ご確認のほど、よろしくお願いいたします。????‍♂️

<参考>
https://note.nkmk.me/python-input-usage/

投稿2021/05/13 12:07

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

52kkp

2021/05/13 13:19

ご回答ありがとうございます! inputでの入力も考えていたので大変参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問