JSON文字列のエスケープ文字
クォート、バックスラッシュ、改行、タブ、UnicodeなどのJSON特殊文字のエスケープシーケンスをマスターしましょう。JSONの文字列エンコーディングエラーを回避する方法を解説します。
詳細な説明
JSON文字列はダブルクォートで囲む必要があり、特殊文字を表現するための特定のエスケープシーケンスのセットをサポートしています。これらのシーケンスを理解することは、JSON構文を壊す可能性のある文字を含むデータを正しくエンコーディングするために不可欠です。
JSONエスケープシーケンスの完全なセット:
\"— ダブルクォート(文字列内にクォートが現れる場合に必要)\\— バックスラッシュ(エスケープ文字自体をエスケープする必要がある)\/— フォワードスラッシュ(オプションですが使用される場合がある)\b— バックスペース(U+0008)\f— フォームフィード(U+000C)\n— 改行 / ラインフィード(U+000A)\r— キャリッジリターン(U+000D)\t— 水平タブ(U+0009)\uXXXX— Unicodeエスケープ(4桁の16進コードポイントで任意の文字を表現)
エスケープが重要な理由:
JSON文字列にはリテラルの制御文字(コードポイントU+0000からU+001F)を含めることができません。JSON文字列内のリテラル改行文字はドキュメントを無効にします。代わりに \n を使用する必要があります。同様に、リテラルタブは \t と記述する必要があります。文字列内のダブルクォートは、文字列を早期に終了させないように \" としてエスケープする必要があります。
Unicodeエスケープ:
\uXXXX 構文を使用して、任意のUnicode文字を表現できます。XXXX は16進のコードポイントです。例えば、\u00E9 はアキュートアクセント付きの "e" を表します。基本多言語面(BMP)外の文字(U+FFFFを超えるコードポイント)にはサロゲートペアが必要です。2つの \u シーケンスを使用します。例えば、絵文字 U+1F600 は \uD83D\uDE00 としてエンコードされます。
開発者がよくやるミス:
最も一般的なミスは、Windowsのファイルパスでバックスラッシュのエスケープを忘れることです。パス C:\new\temp はJSON文字列内で "C:\\new\\temp" と記述する必要があります。そうしないと \n と \t が改行とタブとして解釈されてしまいます。もうひとつの頻繁なエラーは、文字列連結でJSON文字列を手動で構築する際にユーザー提供データのエスケープを忘れることで、パースエラーやインジェクションの脆弱性につながる可能性があります。また、\a や \v のように一部のプログラミング言語では有効でもJSONでは無効なエスケープシーケンスを使用してしまうこともあります。
ベストプラクティス:
JSON文字列を手動や文字列連結で構築しないでください。使用言語の組み込みJSONシリアライザー(JavaScriptの JSON.stringify()、Pythonの json.dumps()、Goの encoding/json)を常に使用してください。これらはすべてのエスケープを自動的に処理します。エスケープの問題をデバッグする際は、生のJSONをバリデーターに貼り付けて構文が壊れている正確な場所を確認してください。複数行テキストを埋め込む場合は、リテラル行をまたいで分割しようとするのではなく、単一の文字列内で \n を使用してください。
ユースケース
C:\Users\docs\new_file.txt のようなファイルパスをJSON設定で正しくエンコーディングし、バックスラッシュや潜在的なエスケープシーケンスを適切に処理する。