Почему в JSON есть косая черта?

Возможный дубликат:
JSON: почему косые черты экранированы?

json.org утверждает, что косые черты (или солидус, /) можно экранировать:

"\/"

Однако косые черты без экранирования также допустимы:

"/"

Что за рациональное за этим стоит? Это происходит от корней Javascript? (То есть "</script>" является проблемой в браузерном Javascript, см. Комментарий Дугласа Крокфорда) Или есть какая-то другая причина?

Ответ 1

Кажется, моя первая мысль была правильной.

'\/' === '/' в JavaScript, а JSON почти действителен JavaScript. Однако почему другие игнорируемые escape-последовательности (например, \z) не разрешены в JSON?

Ключом для этого было чтение http://www.cs.tut.fi/~jkorpela/www/revsol.html, за которым следует http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.2. Функция escape-коллажа позволяет JSON внедряться в HTML (как SGML) и XML.

Ответ 2

Я только что опубликовал обзор этой проблемы в своем блоге. Я думаю, вы правы, это единственная причина. Также обратите внимание, что косая черта - это единственный стандартный символ, который может быть экранирован.

Обычно кодеры JSON делают это неправильно и избегают любой косой черты, которую они находят в пути, в то время как только слэш в </script> должен быть экранирован, и, возможно, все те, которые соответствуют JavaScript RegExp /<\/\w+/, по той же причине.

EDIT: фиксированная ссылка в блоге.