今回は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