PythonでのJSON利用例 データ加工に利用する(追記あり)

「人が見やすい」と「コンピューターが扱いやすい」は違う

前回のエントリ

で作成したデータ「rj」(以降「rj」)

はPython上でprintした際に人が見やすい様、インデントや改行を入れたjson形式のデータ、要は文字列です。

これは勿論「人が見やすい為」のインデント、改行追加。

コンピューターにとっては、ここで入れた様な余分なインデント、改行は邪魔なデータでありデータ全体が扱いにくくなります。

更にindexで認識すると分かりますが、文字列であるが故に、一文字ずつのデータとして認識されています。

これではコンピューターにとっては使い勝手が悪い。

例えば「rj」のデータをindexを使ってrj[0]〜rj[8]まで(1番最初=[0]から9個目=[8]まで)抜き出すとこんな感じになってしまいます。(説明不足の為この部分追記:2021/7/17)

こんな形のデータを手渡されても、コンピューターサイドでは手に余ります。
幾つ目に何のデータがあるのか、等中身を人の目で見ないと分からないからです。(説明不足の為この部分追記:2021/7/17)

Decodeしてコンピューターが扱いやすい型にする

よって、json形式のデータをDecodeしてPythonのdictionary型にすればコンピューターが扱いやすくなります。
Decodeしたデータを変数「rd」に格納します(以降「rd」)。

「rd」はPythonのdictionary形式ですので、扱いやすくなります。

key「consolidated_weather」の一括りのデータから、1つ目(index = 0:id =5486406878101504)を出力、key「sources」の一括りのデータから、1つ目(”title”: “BBC”)のデータを出力、の様にデータとして扱うことが出来ます。

この性質を利用すると、その日毎の天気を出力する事もできます。
2行目が長すぎてPythonicなコードの書き方じゃない!と怒られそうですが、ここでは行を変えない方が分かり易そうなので、一旦そのままにしておきます。

と言う事で、コンピューターの使い勝手を良くする為にはDecodeしてPythonのdictionary形式にする。

ちなみに、今回「rj」からDecodeした「rd」は、元のjson形式のデータからr.json()でDecodeした「rt」と同じです。

このDecodeとEncodeの関係は先のエントリ

で見た様に、データの型によってはずれが起きる危険性がありそうです。

よって、基本は元の元のjson形式ファイルと、このjson形式データからDecodeしたPython dictionary型ファイルとで作業し、Encode, Decodeをぐるぐる回さない方が良い、と言うのが現時点の理解。

基本は外部からデータを受領する際にはJSON形式で受領
Pythonで扱い易いdictionary形にDecodeした上で加工、利用
外部にデータを送る際には、JSON形式にEncode
と言う使い方と理解。

あくまでも他アプリとの間を繋ぐ役割のものなので、無闇にEncode, Decodeをぐるぐる回すものではない。

これは当然の事なのでしょうが、訳も無くそこにPythonデータがあるとEncodeしたくなり、JSON形式のデータがあるとDecodeをしたくなる自分への自戒として。
(最後の自分なりのまとめを修正:2021/7/17)


スポンサーリンク