Почему парсер JQuery JSON нуждается в двойном экранировании для обратной косой черты? - PullRequest
15 голосов
/ 28 сентября 2010

У меня проблемы с наведением на особую особенность формата данных 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 Ответ

30 голосов
/ 28 сентября 2010

Первый экранированный символ экранирует его в строковом литерале Javascript.
Второй escape экранирует его в строковом литерале JSON.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...