[Python]json.dumpsのマスターガイド(改行、日本語の使い方)

json.dumpsの基本的な使い方とは

json.dumpsは、Pythonの標準ライブラリに含まれるJSONエンコーダーです。JSONエンコーダーは、Pythonの辞書やリストなどのオブジェクトをJSON形式に変換するために使用されます。json.dumpsの基本的な使い方は以下の通りです。

import json
data = {"name": "John", "age": 30}
json_data = json.dumps(data)
print(json_data)

上記のプログラムは、Pythonの辞書型のデータをJSON形式に変換しています。json.dumps関数によって、Pythonの辞書型のデータがJSON形式の文字列に変換され、print関数によって出力されます。

json.dumpsで改行を含むデータの扱い方

json.dumpsで改行を含むデータを扱う場合、改行文字をエスケープする必要があります。

import json
data = {"name": "John\nDoe", "age": 30}
json_data = json.dumps(data)
print(json_data)

上記のプログラムは、改行文字を含むPythonの辞書型のデータをJSON形式に変換しています。改行文字は、バックスラッシュとnの組み合わせでエスケープされています。

json.dumpsで日本語を含むデータの扱い方

json.dumpsで日本語を含むデータを扱う場合、ensure_ascii=Falseを指定する必要があります。これによって、日本語がUnicodeエスケープシーケンスではなく、そのままの文字列として出力されます。

import json
data = {"name": "山田太郎", "age": 30}
json_data = json.dumps(data, ensure_ascii=False)
print(json_data)

上記のプログラムは、日本語を含むPythonの辞書型のデータをJSON形式に変換しています。ensure_ascii=Falseを指定することで、日本語がUnicodeエスケープシーケンスではなく、そのままの文字列として出力されます。

json.dumpsの高度な使い方

json.dumpsには、様々なオプションが用意されています。以下に一部を紹介します。

  • indent: インデントの文字列を指定することで、出力されるJSON形式の文字列を整形することができます。
  • sort_keys: キーをソートして出力するかどうかを指定することができます。
  • default: エンコードできないオブジェクトを変換するための関数を指定することができます。

それぞれのオプションを使用したプログラム例を以下に示します。

import json
data = {"name": "John", "age": 30, "hobbies": ["reading", "traveling", "sports"]}
json_data = json.dumps(data, indent=2, sort_keys=True)
print(json_data)

上記のプログラムは、indentオプションを使用してJSON形式の文字列を整形しています。sort_keysオプションを使用して、キーをソートして出力しています。

import json
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
def person_encoder(obj):
    if isinstance(obj, Person):
        return {"name": obj.name, "age": obj.age}
    raise TypeError("Object of type 'Person' is not JSON serializable")
person = Person("John", 30)
json_data = json.dumps(person, default=person_encoder)
print(json_data)

上記のプログラムは、defaultオプションを使用して、エンコードできないオブジェクトを変換するための関数を指定しています。PersonクラスのインスタンスをJSON形式に変換するために、person_encoder関数を定義しています。

実際のコード例を用いた理解の深化

以下は、json.dumpsを使用して、CSVファイルをJSON形式に変換するプログラム例です。

import csv
import json
def csv_to_json(csv_file_path):
    with open(csv_file_path, "r") as f:
        reader = csv.DictReader(f)
        rows = [row for row in reader]
    return json.dumps(rows, indent=2, ensure_ascii=False)
json_data = csv_to_json("data.csv")
print(json_data)

上記のプログラムは、CSVファイルを読み込み、csv.DictReaderを使用して辞書型のリストに変換しています。その後、json.dumpsを使用してJSON形式に変換しています。JSON形式の文字列は、print関数で出力されます。

json.dumpsを使った一般的なエラーとその対処法

json.dumpsを使用する際によく発生するエラーとその対処法を以下に示します。

  • TypeError: Object of type ‘…’ is not JSON serializable
    対処法: エンコードできないオブジェクトが含まれる場合、defaultオプションを使用して、変換するための関数を指定する。
  • UnicodeDecodeError: ‘utf-8’ codec can’t decode byte …
    対処法: 読み込むファイルのエンコーディングがUTF-8以外の場合、encodingオプションを使用して、エンコーディングを指定する。

まとめ

本記事では、json.dumpsの基本的な使い方から、改行や日本語を含むデータの扱い方、高度な使い方、実際のコード例、一般的なエラーとその対処法について解説しました。json.dumpsは、PythonでJSON形式のデータを扱う際に不可欠なツールであり、本記事を参考に上手に活用していきましょう。