Я потрясен присутствием высокооплачиваемой дезинформации по такому часто обсуждаемому вопросу об основной теме.
Строки JSON нельзя заключать в одинарные кавычки . Различные версии спецификации ( оригинал Дугласа Крокфорда, версия ECMA и версия IETF ) утверждают, что строки должны заключаться в двойные кавычки. Это не теоретический вопрос и не вопрос мнения, как это принято в настоящее время; любой анализатор JSON в реальном мире выдаст ошибку, если вы попытаетесь проанализировать строку в одинарных кавычках.
Версия Крокфорда и ECMA даже отображает определение строки, используя красивую картинку, которая должна ясно дать понять смысл:
На симпатичной картинке также перечислены все допустимые escape-последовательности в строке JSON:
\"
\\
\/
\b
\f
\n
\r
\t
\u
с последующим четырехзначным числом
Обратите внимание, что вопреки бессмыслице в некоторых других ответах здесь, \'
никогда не допустимая escape-последовательность в строке JSON. Так не должно быть, потому что строки JSON всегда заключаются в двойные кавычки.
Наконец, вам обычно не нужно думать о экранировании символов при программной генерации JSON (хотя, конечно, вы будете это делать при ручном редактировании, скажем, файла конфигурации на основе JSON). Вместо этого сформируйте структуру данных, которую вы хотите кодировать, используя любые типы карт, массивов, строк, чисел, логических и нулевых значений, которые есть у вашего языка, а затем закодируйте ее в JSON с помощью функции кодирования JSON. Такая функция, вероятно, встроена в любой язык, который вы используете, например, в JavaScript JSON.stringify
, PHP json_encode
или Python.json.dumps
, Если вы используете язык, который не имеет такой встроенной функциональности, вы можете найти библиотеку JSON для разбора и кодирования. Если вы просто используете язык или библиотечные функции для преобразования вещей в JSON и обратно, вам даже не нужно знать правила экранирования JSON. Вот что должен был сделать ошибочный вопрос, задаваемый здесь.