PythonでJSONデータを扱う際、特殊文字のエスケープは非常に重要です。JSONはJavaScript Object Notation
の略で、データ交換のための軽量なフォーマットです。JSONの仕様に従って、特定の文字はエスケープする必要があります。
この記事では、Pythonを使用してJSON文字列の特殊文字を正しくエスケープする方法について詳しく解説します。
1. JSONにおける特殊文字の理解

JSONでは、文字列はダブルクォートで囲まれ、特定の文字はエスケープする必要があります。エスケープが必要な文字には以下のものがあります。
- ダブルクォート (
"
) - バックスラッシュ (
\
) - 制御文字(U+0000からU+001Fまでの文字)
これらの文字は、JSON文字列内で特別な意味を持つため、適切にエスケープしなければなりません。
2. PythonのJSONモジュールを使用したエスケープ
Pythonには、JSONデータを扱うための組み込みモジュールjson
があります。このモジュールを使用することで、簡単にJSONデータをエンコード(シリアライズ)したりデコード(デシリアライズ)したりできます。
2.1. 基本的な使い方
まずは、基本的なJSONのエンコードとデコードの方法を見てみましょう。
import json
# 辞書を定義
data = {
"name": "John Doe",
"age": 30,
"city": "New York"
}
# JSON文字列にエンコード
json_string = json.dumps(data)
print(json_string)
このコードを実行すると、次のような出力が得られます。
{"name": "John Doe", "age": 30, "city": "New York"}
2.2. 特殊文字のエスケープ
次に、特殊文字を含むデータをエンコードしてみましょう。
data_with_special_chars = {
"quote": "He said, \"Hello, World!\"",
"backslash": "This is a backslash: \\",
"control_char": "This is a newline character:\nNew line starts here."
}
json_string_with_special_chars = json.dumps(data_with_special_chars)
print(json_string_with_special_chars)
このコードを実行すると、特殊文字が正しくエスケープされたJSON文字列が得られます。
{"quote": "He said, \"Hello, World!\"", "backslash": "This is a backslash: \\\\", "control_char": "This is a newline character:\nNew line starts here."}
3. ensure_ascii
パラメータの活用
Pythonのjson.dumps()
関数には、ensure_ascii
というパラメータがあります。このパラメータを使用することで、非ASCII文字をエスケープするかどうかを制御できます。デフォルトではTrue
に設定されており、非ASCII文字は\uXXXX
形式でエスケープされます。
3.1. ensure_ascii=True
の例
data_with_unicode = {
"name": "東京",
"message": "こんにちは"
}
json_string_with_ascii = json.dumps(data_with_unicode)
print(json_string_with_ascii)
出力は次のようになります。
{"name": "\u6771\u4eac", "message": "\u3053\u3093\u306b\u3061\u306f"}
3.2. ensure_ascii=False
の例
非ASCII文字をそのまま出力したい場合は、ensure_ascii
をFalse
に設定します。
json_string_without_ascii = json.dumps(data_with_unicode, ensure_ascii=False)
print(json_string_without_ascii)
この場合、出力は次のようになります。
{"name": "東京", "message": "こんにちは"}
4. JSONファイルへの書き込み
JSONデータをファイルに書き込む際も、同様にエスケープ処理が行われます。json.dump()
関数を使用して、辞書をJSONファイルに書き込むことができます。
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data_with_unicode, f, ensure_ascii=False)
このコードを実行すると、data.json
というファイルに非ASCII文字がそのまま書き込まれます。
5. JSONデータの読み込み
JSONファイルからデータを読み込む際も、json.load()
関数を使用します。読み込んだデータはPythonの辞書として扱われます。
with open('data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
print(loaded_data)
このコードを実行すると、元の辞書が復元されます。
6. 特殊文字の手動エスケープ
場合によっては、特殊文字を手動でエスケープする必要があるかもしれません。以下のように、文字列の置換を使用してエスケープ処理を行うことができます。
def escape_special_chars(s):
return s.replace('"', '\\"').replace('\\', '\\\\')
raw_string = 'He said, "Hello, World!" and this is a backslash: \\'
escaped_string = escape_special_chars(raw_string)
print(escaped_string)
この関数を使用すると、特殊文字が手動でエスケープされます。
7. まとめ
PythonでJSON文字列の特殊文字を正しくエスケープすることは、データの整合性を保つために非常に重要です。json
モジュールを使用することで、簡単にエスケープ処理を行うことができます。
以下のポイントを再確認しましょう。
- JSONでは特定の文字をエスケープする必要がある。
json.dumps()
関数のensure_ascii
パラメータを使用して、非ASCII文字のエスケープを制御できる。- JSONデータをファイルに書き込む際も、エスケープ処理が行われる。
- 手動で特殊文字をエスケープする場合は、文字列の置換を使用することができる。
これらの知識を活用して、PythonでのJSONデータの取り扱いをよりスムーズに行いましょう。