Почему парсер JQuery JSON нуждается в двойном экранировании для обратных косых черт?

У меня возникли проблемы, обертывая вокруг себя особенность формата данных JSON.

Ситуация такова: у меня есть строка, содержащая путь к каталогу Windows (sigh), обратная косая черта экранирована. По какой-то причине парсер JQuery JSON считает, что одного выхода недостаточно.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">

var success = jQuery.parseJSON('{"a":"b:\\\\c"}');
var failure = jQuery.parseJSON('{"a":"b:\\c"}');

</script>

Может ли кто-нибудь объяснить, что делает такое двойное экранирование необходимым?

Ответы

Ответ 1

Первый побег выходит из строкового литерала в Javascript.
Второе побег выходит из строкового литерала JSON.

Выражение Javascript '{"a":"b:\\c"}' оценивается как строка '{"a":"b:\c"}'.
Эта строка содержит одиночный unescaped \, который должен быть экранирован для JSON. Чтобы получить строку, содержащую \\, каждый \ должен быть экранирован в выражении Javascript, в результате получим "\\\\".