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 し、その後コンテキスト別に処理します。
推奨ワークフロー
貼り付け -> パース -> 整形 -> 文字列のまま残るフィールドを内側パース -> 業務バリデーション。