今回は、Pythonのjson.dumpsでJSON形式へ変換する方法についてご紹介します。
JSON形式とは
JSON形式は、JavaScript Object Notation の略称です。
データをキーと値の組み合わせで表し、さまざまなプログラミング言語で扱いやすいテキストベースのフォーマットとなっています。
たとえば Python の辞書型と構造が似ていますが、JSON ではキーと文字列にダブルクォートが使われるのが特徴です。
json.dumpsとは
json.dumps は、Python の json モジュールが提供する関数です。
Python のオブジェクト(辞書、リスト、数値、文字列など)を JSON形式 の文字列へ変換するために使用されます。
単純なデータ型はもちろん、オプションを活用することでインデントやエンコード方式などを柔軟にコントロールできます。
json.dumpsの使い方とオプション
ここでは、基本的な使い方や代表的なオプションをいくつかご紹介します。
辞書をJSON文字列へ変換する基本例
まずは、単純に Python の辞書オブジェクトを変換する例です。
1 2 3 4 5 |
import json data = {"name": "太郎", "age": 25, "city": "Tokyo"} json_str = json.dumps(data) print(json_str) |
{“name”: “太郎”, “age”: 25, “city”: “Tokyo”}
上記のように、json.dumps を呼び出すだけで、辞書が JSON 形式の文字列に変換されます。
JSON ではキーと文字列がダブルクォートで囲まれる点に注目してください。
インデントとキーのソート
indent パラメータを指定すると、整形された JSON 文字列を出力できます。
また、sort_keys を True にすると、キーをソートして出力します。
1 2 3 4 5 |
import json data = {"name": "太郎", "age": 25, "city": "Tokyo"} json_str = json.dumps(data, indent=4, sort_keys=True) print(json_str) |
{
“age”: 25,
“city”: “Tokyo”,
“name”: “太郎”
}
インデントによって階層が見やすくなるほか、キーがアルファベット順にソートされます。
日本語をエスケープしない設定
json.dumps はデフォルト設定では非 ASCII 文字を Unicode エスケープします。
そのため、日本語をそのまま出力したい場合は ensure_ascii=False を指定します。
1 2 3 4 5 |
import json data = {"名前": "太郎", "国": "日本"} json_str = json.dumps(data, ensure_ascii=False) print(json_str) |
{“名前”: “太郎”, “国”: “日本”}
このように、日本語もエスケープされずに JSON 文字列として表示されます。
変換できないオブジェクトを扱う場合
標準の json.dumps は、基本的な型以外のオブジェクト(datetime, Decimal など)を扱えません。
そうした場合は default 引数を使い、変換関数を指定して対応することができます。
1 2 3 4 5 6 7 8 9 10 11 |
import json from datetime import datetime def default_converter(o): if isinstance(o, datetime): return o.isoformat() raise TypeError(f"Type {type(o)} not serializable") data = {"current_time": datetime.now()} json_str = json.dumps(data, default=default_converter) print(json_str) |
{“current_time”: “2025-02-15T12:34:56.789012”}
datetime オブジェクトを ISO 8601 形式の文字列として変換し、JSON 文字列を生成しています。
よくあるエラーと対処法
Pythonのjson.dumps を使ううえで、代表的なエラーや注意点をまとめます。
- TypeError: JSON 化できないオブジェクトを含む場合に発生します。default 引数でカスタム変換処理を設定しましょう。
- KeyError: JSON 仕様上、辞書のキーは文字列に限定されます。数値やタプルなど文字列以外のキーはエラーになるため、skipkeys=True の利用や事前のキー変換を検討してください。
- Unicode エスケープ: デフォルトでは日本語などの非 ASCII 文字が Unicode エスケープされます。日本語でそのまま出力したい場合は ensure_ascii=False を指定します。
- シングルクォートでの囲み: str() など Python の文字列変換とは異なり、JSON 仕様に従ってダブルクォートが用いられます。JSON として読み込めなくなるので、独自にシングルクォートを使わないよう注意が必要です。
上記を理解しておけば、意図しないエラーを防止できます。
まとめ
Python の json.dumps は、辞書やリストなどのオブジェクトを簡単に JSON 文字列へ変換できます。
オプションを活用することで、インデントや日本語出力などを柔軟に制御できます。
変換できないオブジェクトを扱う際には、default 引数の設定がポイントです。