JSON Escape / Unescape: ネストデータを正しく扱う方法

2024-04-15

キュー、ログ、DB カラムでは JSON が JSON 文字列として入れ子になることがあります。こうしたデータを安全にほどくには、エスケープ規則の理解が不可欠です。

エスケープが必要な文字

文字列では "、\\、\n や \t などの制御文字をエスケープする必要があります。

{
  "quote": "He said \"Hello\"",
  "path": "C:\\temp\\data"
}

文字列としてネストされた JSON

外側を先にパースし、次に内側の文字列フィールドへ JSON.parse を適用します。

{ "payload": "{\"id\":1,\"name\":\"Alice\"}" }

ログに多い二重エスケープ

バックスラッシュを目で数えず、期待するオブジェクトまたは文字列に到達するまで段階的にパースしてください。

安全なアンエスケープ

正規表現置換ではなく JSON.parse を使用し、非信頼データはパース後に構造検証(例: __proto__ キー)を行います。

他コンテキスト(SQL / シェル)

JSON のエスケープ規則は SQL やシェルのクォート規則と異なります。まずオブジェクトを組み立てて JSON.stringify し、その後コンテキスト別に処理します。

推奨ワークフロー

貼り付け -> パース -> 整形 -> 文字列のまま残るフィールドを内側パース -> 業務バリデーション。