今回はPythonでのJSONファイルの取り扱いについて、基本的な方法を紹介していく。
JSONは昨今、Webと他アプリとの間でデータをやり取りする(主にAPIなど)上で、多くの場面で扱われれることの多いファイル形式だ。
JSONはキーバリュー形式で記述され、数値や文字列、ディクショナリやリスト、真偽値など、幅広いオブジェクトをサポートしている。
Contents
PythonでJSONデータを用意する
まずはサンプルとなるJSONデータを用意しよう。
PythonでJSONデータを用意する場合、下記のとおり3つのダブルクォーテーションで囲んで変数に代入すると可読性が良いだろう。
json_data = """ { "name": "hoge", "age": 31, "hobby": ["BJJ", "Programming", "Movie"] } """
この時点で、json_dataはただの文字列だ。
用意したJSONデータをJSONオブジェクトとして読み込む
JSONデータを読み込むためのライブラリはいくつかあるが、ここではPython標準のjsonライブラリを使用する。
データをJSONオブジェクトとして読み込む場合は、json.loadsを使う。
import json json_obj = json.loads(json_data) # {'name': 'hoge', 'age': 31, 'hobby': ['BJJ', 'Programming', 'Movie']}
なお、PythonでロードしたJSONオブジェクトを、JSONファイルとして書き出す際は、json.dumpsを使う。
Python内ではjson.loadsを、外部ファイルに書き出す際はjson.dumpsを使う点に注意が必要だ。
asjson = json.dumps(json_obj)
JSONオブジェクトの加工
json.loadsで用意したJSONオブジェクトをこの後どう扱うかは自由だが、一例としてpandasのデータフレームとして変換する方法を紹介しておこう。
import json import pandas as pd json_obj = json.loads(json_data) # {'name': 'hoge', 'age': 31, 'hobby': ['BJJ', 'Programming', 'Movie']} df1 = pd.DataFrame(json_obj) # name age hobby # 0 hoge 31 BJJ # 1 hoge 31 Programming # 2 hoge 31 Movie df2 = pd.DataFrame(json_obj['hobby'], columns=['hobby']) # hobby # 0 BJJ # 1 Programming # 2 Movie
pandasのread_jsonでJSONファイルをpandasオブジェクトに変換する
データの加工の応用として、pandasのread_jsonメソッドを使えば、外部のJSONファイルを読み込み、自動的にpandasのオブジェクト(データフレームやシリーズ)に変換することができる。
まずは以下のようなサンプルファイルを用意しよう。
cd ~/examples/ vim ex6.json # 下記の内容のファイルを用意する [{"a": 1, "b": 2, "c": 3}, {"a": 4, "b": 5, "c": 6}, {"a": 7, "b": 8, "c": 9}]
次にPythonコードだ。
以下のとおり、作成したファイルを引数として渡せば自動的にデータフレームとしてJSONを読み込むことができる。
df = pd.read_json('examples/ex6.json') # a b c # 0 1 2 3 # 1 4 5 6 # 2 7 8 9