JSON ファイルを読み込む (json.load)
Python に付属している json
ライブラリが提供する json.load 関数を使用すると、JSON 形式のテキストファイルを読み込んで、Python のオブジェクトを生成することができます。
json.load
関数のパラメーターには、ファイル名ではなく、ファイルオブジェクト(read
関数を持つオブジェクト)を渡すことに注意してください。
JSON ファイル内の各要素は、次のような対応付けで Python オブジェクトに変換されます。
JSON の型 | Python の型 |
---|---|
object | dict |
array | list |
string | str |
number | int / float |
true / false | True / False |
null | None |
JSON ファイルではなく、JSON 形式の文字列を読み込みたいときは、json.load
の代わりに json.loads
関数を使用します。
JSON ファイルに書き出す (json.dump)
基本
Python のオブジェクトを JSON 形式のテキストファイルに書き出すには、json.dump 関数 を使用します。
こちらも、パラメーターとしてはファイル名ではなく、ファイルオブジェクト(write
関数を持つオブジェクト)を渡すことに注意してください。
出力形式をカスタマイズする (indent, sort_keys)
デフォルトでは、上記のように改行なしのコンパクトな出力になります。
改行やインデントを入れて出力したい場合は、json.dump
関数の引数で、indent=2
のようにインデントサイズを指定します。
また、Python 3.7 以降は辞書オブジェクト (dict
) のキーは、挿入された順に出力されるようになっています(デフォルトで collections.OrderedDict 相当の動きになりました)。
アルファベット順に出力したい場合は、sort_keys=True
を指定します。
辞書オブジェクトのキーが追加順に出力されるのは地味に便利で、例えば、id
プロパティを先頭に出力したい場合は、単純にプログラム内で id
を最初に追加するだけで済みます。
book1 = {'id': 1, 'author': 'Author-1', 'title': 'Title-1'}
book2 = {'id': 2, 'author': 'Author-2', 'title': 'Title-2'}
book3 = {'id': 3, 'author': 'Author-3', 'title': 'Title-3'}
books = [ book1, book2, book3 ]
save_json('books.json', books)
要素の順序をもっと細かく制御する方法は、下記の記事を参考にしてください。
日本語をそのまま出力する (ensure_ascii)
json.dump
関数は、デフォルトで日本語を Unicode エスケープして出力しようとします(例えば、あ
は \u3042
になります)。
この振る舞いを抑制して、日本語のまま出力するには、引数で ensure_ascii=False
を指定します。
JSON 文字列に変換する
JSON ファイルに出力するのではなく、JSON 形式の文字列を取得したいときは、json.dump
の代わりに json.dumps
関数を使用します。