Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
json.dumps() / json.loads()
PythonオブジェクトとJSON形式の文字列を相互変換する関数です。APIとのデータ連携や設定ファイルの読み書きによく使われます。
構文
import json
# PythonオブジェクトをJSON文字列に変換します。
json_str = json.dumps(オブジェクト, ensure_ascii=False, indent=2)
# JSON文字列をPythonオブジェクトに変換します。
obj = json.loads(json_str)
# PythonオブジェクトをJSONファイルに書き込みます。
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(オブジェクト, f, ensure_ascii=False, indent=2)
# JSONファイルをPythonオブジェクトとして読み込みます。
with open('data.json', 'r', encoding='utf-8') as f:
obj = json.load(f)
関数・引数一覧
| 関数 / 引数 | 概要 |
|---|---|
| json.dumps(obj) | PythonオブジェクトをJSON文字列に変換して返します。辞書・リスト・文字列・数値・bool・Noneに対応しています。 |
| json.loads(s) | JSON文字列をPythonオブジェクトに変換して返します。JSONオブジェクトは辞書、配列はリストに変換されます。 |
| json.dump(obj, fp) | PythonオブジェクトをJSON形式でファイルオブジェクトに書き込みます。 |
| json.load(fp) | ファイルオブジェクトからJSONを読み込んでPythonオブジェクトに変換します。 |
| ensure_ascii=False | 日本語などのASCII外の文字をエスケープせずそのまま出力します。デフォルトは『True』(エスケープあり)。 |
| indent=2 | 指定した数のスペースでインデントして整形出力します。デバッグや可読性向上に使います。 |
| sort_keys=True | 辞書のキーをアルファベット順にソートして出力します。 |
サンプルコード
import json
# dumps() でPythonの辞書をJSON文字列に変換します。
user = {'name': '田中太郎', 'age': 30, 'active': True, 'score': None}
json_str = json.dumps(user, ensure_ascii=False)
print(json_str)
# 『{"name": "田中太郎", "age": 30, "active": true, "score": null}』と出力されます。
# ensure_ascii=False を省略すると日本語がエスケープされます。
print(json.dumps(user))
# 『{"name": "\u7530\u4e2d\u592a\u90ce", ...}』と出力されます。
# indent で整形出力します。
pretty = json.dumps(user, ensure_ascii=False, indent=2)
print(pretty)
# インデントされた見やすいJSON形式で出力されます。
# loads() でJSON文字列をPythonオブジェクトに変換します。
json_text = '{"title": "Python入門", "pages": 300, "tags": ["入門", "プログラミング"]}'
data = json.loads(json_text)
print(data['title']) # 『Python入門』と出力されます。
print(data['tags'][0]) # 『入門』と出力されます。
# dump() でファイルに書き込みます。
config = {'host': 'localhost', 'port': 8080, 'debug': False}
with open('config.json', 'w', encoding='utf-8') as f:
json.dump(config, f, ensure_ascii=False, indent=2)
# load() でファイルから読み込みます。
with open('config.json', 'r', encoding='utf-8') as f:
loaded = json.load(f)
print(loaded['port']) # 『8080』と出力されます。
# 不正なJSON文字列はエラーになります。
try:
json.loads("{'key': 'value'}") # シングルクォートは不正です。
except json.JSONDecodeError as e:
print(f'JSONエラー: {e}')
概要
『json.dumps()』はメモリ上の文字列に変換し、『json.dump()』はファイルに直接書き込みます。同様に『json.loads()』は文字列から変換し、『json.load()』はファイルから読み込みます。末尾の『s』が文字列(string)を意味すると覚えると区別しやすいです。
PythonとJSONの型対応は次のようになっています。Pythonの辞書→JSONオブジェクト、リスト・タプル→JSON配列、文字列→JSON文字列、整数・浮動小数点数→JSON数値、『True』/『False』→『true』/『false』、『None』→『null』です。
日本語を含むデータを変換する場合は必ず『ensure_ascii=False』を指定してください。デフォルト(『ensure_ascii=True』)では日本語が『\uXXXX』形式にエスケープされ、ファイルサイズが大きくなり可読性も下がります。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。