[Python]json.dumpsマスターガイド(indent、utf-8、エスケープ)

はじめに

Pythonのjsonモジュールには、JSON形式のデータをPythonのデータ型に変換するjson.loads()と、Pythonのデータ型をJSON形式に変換するjson.dumps()があります。この記事では、json.dumps()の使い方について詳しく解説します。

json.dumpsの基本的な使い方

json.dumps()は、Pythonのデータ型をJSON形式に変換します。たとえば、次のようなリストをJSON形式に変換することができます。

import json
my_list = [1, 2, 3, "four", "五"]
json_str = json.dumps(my_list)
print(json_str)

上記のプログラムを実行すると、次のように出力されます。

[1, 2, 3, "four", "\u4e94"]

ここで、\u4e94は、日本語の「五」をUnicodeエスケープしたものです。

json.dumpsでのindentの利用方法

json.dumps()には、indent引数を指定することで、JSON形式のデータを整形することができます。

import json
my_dict = {"name": "Alice", "age": 25, "hobbies": ["reading", "cooking", "traveling"]}
json_str = json.dumps(my_dict, indent=4)
print(json_str)

上記のプログラムを実行すると、次のように出力されます。

{
    "name": "Alice",
    "age": 25,
    "hobbies": [
        "reading",
        "cooking",
        "traveling"
    ]
}

ここで、indent=4により、インデントの幅が4に設定されています。

json.dumpsでのutf-8エンコーディングの設定方法

json.dumps()は、デフォルトでUTF-8エンコーディングを使用してJSON形式の文字列を生成します。しかし、必要に応じて、ensure_ascii=Falseを指定することで、UTF-8エンコーディング以外のエンコーディングを使用することもできます。

import json
my_dict = {"name": "アリス", "age": 25, "hobbies": ["読書", "料理", "旅行"]}
json_str = json.dumps(my_dict, ensure_ascii=False)
print(json_str)

上記のプログラムを実行すると、次のように出力されます。

{"name": "アリス", "age": 25, "hobbies": ["読書", "料理", "旅行"]}

ここで、ensure_ascii=Falseにより、UTF-8エンコーディング以外のエンコーディングを使用しています。

json.dumpsでの特殊文字のエスケープ処理方法

json.dumps()では、デフォルトで特殊文字をエスケープします。たとえば、次のような文字列をJSON形式に変換する場合、\n\\nにエスケープされます。

import json
my_str = "Hello\nWorld"
json_str = json.dumps(my_str)
print(json_str)

上記のプログラムを実行すると、次のように出力されます。

"Hello\\nWorld"

しかし、必要に応じて、json.dumps()ensure_ascii=Falseを指定することで、特殊文字をエスケープしないようにすることもできます。

import json
my_str = "Hello\nWorld"
json_str = json.dumps(my_str, ensure_ascii=False)
print(json_str)

上記のプログラムを実行すると、次のように出力されます。

"Hello\nWorld"

Pythonのjson.dumpsによるデータ整形の実践例

次のようなJSON形式のデータがあったとします。

{
    "name": "Alice",
    "age": 25,
    "hobbies": [
        "reading",
        "cooking",
        "traveling"
    ],
    "address": {
        "zip_code": "123-4567",
        "prefecture": "Tokyo",
        "city": "Chiyoda-ku",
        "town": "Kudanminami"
    }
}

このデータをPythonのデータ型に変換し、整形するには、次のようなプログラムを書くことができます。

import json
json_str = '''
{
    "name": "Alice",
    "age": 25,
    "hobbies": [
        "reading",
        "cooking",
        "traveling"
    ],
    "address": {
        "zip_code": "123-4567",
        "prefecture": "Tokyo",
        "city": "Chiyoda-ku",
        "town": "Kudanminami"
    }
}
'''
data = json.loads(json_str)
print("名前:", data["name"])
print("年齢:", data["age"])
print("趣味:")
for hobby in data["hobbies"]:
    print("  -", hobby)
print("住所:")
print("  郵便番号:", data["address"]["zip_code"])
print("  都道府県:", data["address"]["prefecture"])
print("  市区町村:", data["address"]["city"])
print("  町名:", data["address"]["town"])
json_str = json.dumps(data, ensure_ascii=False, indent=4)
print(json_str)

上記のプログラムを実行すると、次のように出力されます。

名前: Alice
年齢: 25
趣味:
  - reading
  - cooking
  - traveling
住所:
  郵便番号: 123-4567
  都道府県: Tokyo
  市区町村: Chiyoda-ku
  町名: Kudanminami
{
    "name": "Alice",
    "age": 25,
    "hobbies": [
        "reading",
        "cooking",
        "traveling"
    ],
    "address": {
        "zip_code": "123-4567",
        "prefecture": "Tokyo",
        "city": "Chiyoda-ku",
        "town": "Kudanminami"
    }
}

ここで、json.loads()により、JSON形式のデータをPythonのデータ型に変換し、json.dumps()により、Pythonのデータ型をJSON形式に変換しています。

json.dumpsを使ったプログラミングのヒント

json.dumps()は、JSON形式のデータを生成するための強力なツールです。たとえば、Web APIを開発する際に、JSON形式のレスポンスを生成するために使用することができます。

また、json.dumps()は、Pythonのデータ型をJSON形式に変換するためのツールでもあります。たとえば、Pythonでデータを操作した結果をJSON形式に変換し、外部に公開することができます。

まとめ

json.dumps()は、Pythonのデータ型をJSON形式に変換するためのツールです。indent引数を指定することで、JSON形式のデータを整形することができます。また、ensure_ascii=Falseを指定することで、UTF-8エンコーディング以外のエンコーディングを使用することもできます。さらに、特殊文字をエスケープしないようにすることもできます。

Pythonのjsonモジュールは、JSON形式のデータを扱うための重要なツールの1つです。ぜひ、活用してみてください。