JSON文字列のエスケープ文字

クォート、バックスラッシュ、改行、タブ、UnicodeなどのJSON特殊文字のエスケープシーケンスをマスターしましょう。JSONの文字列エンコーディングエラーを回避する方法を解説します。

Syntax

詳細な説明

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設定で正しくエンコーディングし、バックスラッシュや潜在的なエスケープシーケンスを適切に処理する。

試してみる — JSON Formatter

フルツールを開く