PythonでのJSON利用例 見た目を整える

JSONは、データをコンピュータも人も扱いやすい形にするものです。
今回は人が見やすい形に変更します。

今回扱うデータ

MetaWeather 天気予報のWeb APIからのデータを、requestsモジュールを利用して読み込みます。
location/1118370は東京を表すコードです。

まず変数”r”にデータを格納してステータスを確認。

Status Codeが200と言う事は、サーバーへのrequestがきちんと届き、求めたデータが返された事を示しています。
content-typeが’appication/json’になっているので、Web APIがデータを扱う為のjson形式のデータ、と言う事が分かります。
json形式と言う事はencodingはutf-8のはずですが、確かにその通りになっています。

r.textで出力するとjson形式そのままで吐き出され、中身を見る事が出来ますが、このままでは人間の目では見にくい。

因みに、下記codeが書かれた箱の上、左から3つめ”Toggle Line Wrap”をクリックすると、コードが折りたたまれて全文を一覧しやすくなります。

まずはDecodeして扱いやすいPython形式に変える

ここでr.text => r.json()とすると、rのmethod “r.json()”でjson形式からPythonのdictionaryのデータ型にDecode(Deserialization)されます。
因みに、このrは

のrであり、request.getで得られたObject(Response Objectと呼ばれている)になります。

これをただr.json()で出力すると下記の通り。


一見、区切りがダブルクォーテーション「”」からシングルクォーテーション「’」に変わり、最初と最後の「’」クオーテーションマークが取れただけの同じようなデータに見えますが、実際はPythonのdictionary型データであり、扱い易くなっています。

Encodeをして見た目を整える

上記でjson型のデータをPythonのdictionary型にdecodeしたので、今からPythonのjsonモジュールを使用して見易くします。

変数rjに、元データ(json型)からdictionary型データにdecodeされたr.json()から、json.dumpsでEncodeしたデータを格納します。
その際、「indent=4」の様にindentを入れます。

このrjをただ出力すると、同じ様な見にくいデータのままですが、見ると所々に改行「\n」が入っていることが分かります。

最初と最後の{}の外にシングルクォーテーション「’」がある事から、Pythonのdictionary型からjson形式データにEncodeされた事が分かります。

このrjをprint()で出力すると、indent=4で整えられた人間の目で見やすいデータになりました。

う〜ん、見やすさが段違い。
元のtextデータに一つ一つ改行などしていたらどれだけの時間が掛かるのか想像もしたくないですね。

今回やった事

Web Apiからjson形式で取得したデータを

requestモジュールを使用して扱いやすいPython型にDocodeした上で

jsonモジュールのjson.dumps()で見やすいjson形式データにEncodeして出力

今回はJSONモジュールを使って人の目で見やすい形式にしました。
次はコンピューターが扱いやすい形式に。