見出し画像

Strava/Withings Web API開発 - Pythonリファレンス(データ格納:JSONと配列、辞書)

JSONとは

JSON(JavaScript Object Notaion)
JavaScript のデータ定義文をベースとした、簡易的なデータ定義言語です。

(参考)JSONについて調べてみた
https://qiita.com/chihiro/items/dd1912c1406dbfe16b72

OpenWeatherMapもStravaもWithingsも全てこのJSONでデータを扱っており、Web APIでのデファクトスタンダードのようです。

(参考)5分で分かるWebAPI
https://developer.ntt.com/ja/blog/5%E5%88%86%E3%81%A7%E5%88%86%E3%81%8B%E3%82%8BWebAPI

JSONのフォーマット
以下の通り記述します。{  } の中に、ダブルクォーテーション(")で変数と値を囲み、カンマで変数と値を区切ります。

{
"name": "SanoAtsu",
"date": "20200519",
"Distance":20.5,
"MaxHR": 186
}

例えばこのサンプルだと、自分が5月19日に実施したトレーニングの走行距離が20.5km、最大心拍数が186というのがわかります。

これがCSV形式だと、"SanoAtsu,20200519,20.5,186" といった形式になって、一見何のデータか分かりづらいですが、JSONだとぱっと見で何のデータか判別しやすく、またプログラムで処理しやすい、というメリットがあるようです。

配列

Pythonでは配列を以下の通りに表記します。
list = [1,2,3,4]

(参考)入門者必見!Pythonのリスト(配列)を使いこなすための5つのステップ
https://www.sejuku.net/blog/32681

JSONと配列の組み合わせ

JSONと配列を組み合わせると以下の形式となります。
OpenWeatherMap/Strava/Withingsからデータを取得するとこの形式になります。

[
{
"name": "SanoAtsu",
"date": "20200517",
"Distance":15.1,
"MaxHR": 173
},
{
"name": "SanoAtsu",
"date": "20200518",
"Distance":8.2,
"MaxHR": 155
},
{
"name": "SanoAtsu",
"date": "20200519",
"Distance":20.5,
"MaxHR": 186
}
]

このサンプルでは、5月17日、18日、19日のトレーニングデータ(距離と最大心拍数)をそれぞれ表しています。

JSONから辞書に変換

以下リンクを見ると、辞書はdict型のオブジェクト、JSONは文字列とのことです。プログラムで扱うにはdict型への変換(json.loads)が必須です。

(参考)Python3 辞書型⇔文字列(JSON)の相互変換
https://www.lisz-works.com/entry/python-convert-json-dict

dict型に変換した後は、値を取り出して配列に格納します。配列に格納することで、画面表示やグラフ化など加工が可能になります。

(参考)PythonでWeb APIを叩いてJSONをパースする
https://qiita.com/bowtin/items/4dcab3389c892baba1a5

コーディング例(天気予報データ


・JSONデータ
{
"date": "20200519",
"weather": "雨",
"temp":20,
}
{
"date": "20200520",
"weather": "曇り",
"temp":21,
}
・・・

・実行処理

response=requests.get(url) ##Web APIでHTTP GET
    forecastJSON=json.loads(response.text) ##JSON形式でデータを格納
for item in forecastJSON: ## {}のデータを1件づつ処理
    forecastDate = item["date"] ##日付
    forecastWeather = item["weather"##天気
    forecastTemp = item["temp"##気温

・結果
以下のように配列にデータが格納されます。
forecastDate [5/19,5/20,5/21,5/22,5/23,5/24,5/25]
forecastWeather [雨,曇り,曇り,晴れ,雨,曇り,曇り]
forecastTemp [20,21,20,25,18,20,21]

配列に格納後、画面表示やグラフ化などが可能になります。



よろしければサポートお願いします。