Почему парсер 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, в результате получим "\\\\"
.