PythonでJSONファイルを読み込む2つの方法

スポンサーリンク

今回は、PythonでJSONファイルを読み込む方法を紹介します。

しばしば、関連するjsonファイルからjsonデータを簡単に読み、パースしたいと思うことがあります。


スポンサーリンク

方法1: json.load()を使って Python で JSON ファイルを読み込む

json モジュールは Python3 の組み込みモジュールで、 json.load() を使って JSON ファイルを扱う機能を提供しています。

このメソッドを使って、PythonでJSONファイルを直接読み込んだ後、Pythonオブジェクトを構築することができます

例えば、sample.json が次のような内容のJSONファイルであるとします。

{
"name": "Python",
"type": "website",
"language": "Python"
}

このJSONオブジェクトをPythonのオブジェクトに読み込むには、以下のプログラムを使用します。

import json
  
with open("sample.json", "r") as rf:
    decoded_data = json.load(rf)
  
print(decoded_data)
# Check is the json object was loaded correctly
try:   
    print(decoded_data["name"])
except KeyError:
    print("Oops! JSON Data not loaded correctly using json.loads()")

結果は以下の通りです。

{'name': 'Python', 'type': 'website', 'language': 'Python'}
Python

確かに、ファイルからJSONオブジェクトを正しく読み込むことができました!


方法2:大きなJSONファイルにはijsonを使用する

JSONファイルが十分に大きく、コンテンツ全体をメモリに読み込むのにコストがかかる場合、より良い方法は、ijsonを使用してファイルのコンテンツをストリームに変換することです。

ストリームは(JSON オブジェクトと同じように)オブジェクトのコレクションで、必要に応じてメモリにロードされます。

つまり、データローダーは必要なときだけ、データを “遅延 “的にロードすることになります。

これにより、大きなファイルを扱う際のメモリ要件が緩和される。

json` をインストールするには、pip を使ってください。

pip install ijson

さて、実験のために、ギガバイトのデータをダウンロードするのは時間がかかるので、ある程度小さいJSONファイルを使うことにしましょう!

ここでは、このリンクにあるCOVIDタイムスケールJSONファイルを使用します。

ファイルをダウンロードし、名前を covid_timeseries.json に変更します。

ファイルサイズは2MB程度にしてください。

import ijson
 
for prefix, type_of_object, value in ijson.parse(open("covid_timeseries.json")):
    print(prefix, type_of_object, value)

出力例(数行)

Yemen.item.date string 2020-4-13
Yemen.item map_key confirmed
Yemen.item.confirmed number 1
Yemen.item map_key deaths
Yemen.item.deaths number 0
Yemen.item map_key recovered
Yemen.item.recovered number 0
Yemen.item end_map None
Yemen.item start_map None
Yemen.item map_key date
Yemen.item.date string 2020-4-14
Yemen.item map_key confirmed
Yemen.item.confirmed number 1
Yemen.item map_key deaths
Yemen.item.deaths number 0
Yemen.item map_key recovered
Yemen.item.recovered number 0
Yemen.item end_map None
Yemen end_array None

これは巨大なJSONファイルの内容を表示しますが、ファイル全体を表示しないように、カウンタ変数を保持しておくとよいでしょう。

json` は遅いかもしれませんが、低いメモリ制限の中で動作しているようです。

大きなファイルを扱う場合は、このモジュールを試してみるとよいでしょう。


まとめ

この記事では、PythonでJSONファイルを読み込む方法を学びました。

また、ijson を使って大量のデータを扱う方法についても簡単に説明しました。


タイトルとURLをコピーしました