今回はPythonでのJSONファイルの取り扱いについて、基本的な方法を紹介していく。

JSONは昨今、Webと他アプリとの間でデータをやり取りする(主にAPIなど)上で、多くの場面で扱われれることの多いファイル形式だ。

JSONはキーバリュー形式で記述され、数値や文字列、ディクショナリやリスト、真偽値など、幅広いオブジェクトをサポートしている。

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