Согласно диаграмме конечного автомата на веб-сайте JSON допускаются только экранированные символы двойных кавычек, а не одинарные. Символы одинарных кавычек не должны быть экранированы:
Обновление - больше информации для тех, кто заинтересован:
Дуглас Крокфорд конкретно не говорит, почему спецификация JSON не позволяет экранировать одинарные кавычки в строках. Однако во время обсуждения JSON в Приложении E JavaScript: Хорошие части он пишет:
Цели разработки JSON должны были быть минимальными, переносимыми, текстовыми и подмножеством JavaScript. Чем меньше нам нужно договариваться, чтобы взаимодействовать, тем легче нам взаимодействовать.
Поэтому, возможно, он решил разрешить определять строки только с помощью двойных кавычек, поскольку это еще одно правило, с которым должны согласиться все реализации JSON. В результате невозможно, чтобы одиночный символ кавычки в строке случайно завершил строку, поскольку по определению строка может заканчиваться только символом двойной кавычки. Следовательно, нет необходимости разрешать экранирование символа одинарной кавычки в формальной спецификации.
Рытье немного глубже, Крокфорд в
org.json реализация JSON для Java является более допустимым и
делает позволяют одиночные кавычки:
Тексты, создаваемые методами toString, строго соответствуют правилам синтаксиса JSON. Конструкторы более снисходительны в текстах, которые они примут:
...
- Строки могут быть заключены в кавычки (одинарная кавычка).
Это подтверждается исходным кодом JSONTokener . nextString
Метод принимает спасся одиночные кавычки и относятся к ним так же , как двойные кавычки:
public String nextString(char quote) throws JSONException {
char c;
StringBuffer sb = new StringBuffer();
for (;;) {
c = next();
switch (c) {
...
case '\\':
c = this.next();
switch (c) {
...
case '"':
case '\'':
case '\\':
case '/':
sb.append(c);
break;
...
В верхней части метода информационный комментарий:
Формальный формат JSON не допускает строки в одинарных кавычках, но реализация может принимать их.
Поэтому некоторые реализации будут принимать одинарные кавычки - но вы не должны полагаться на это. Многие популярные реализации довольно ограничительны в этом отношении и будут отклонять JSON, который содержит строки в одинарных кавычках и / или экранированные одинарные кавычки.
Наконец, чтобы связать это с исходным вопросом, jQuery.parseJSON
сначала попытайтесь использовать собственный анализатор JSON браузера или загруженную библиотеку, такую как json2.js, где это применимо (на дополнительном примечании - библиотека, на которой основана логика jQuery, если JSON
она не определена) , Таким образом, jQuery может быть таким же разрешающим, как и базовая реализация:
parseJSON: function( data ) {
...
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
...
jQuery.error( "Invalid JSON: " + data );
},
Насколько я знаю, эти реализации придерживаются только официальной спецификации JSON и не принимают одинарные кавычки, следовательно, jQuery также не принимает.