Так как формат JSON указывает, что одиночные кавычки не должны быть экранированы, большинство библиотек (или даже собственный JSON-парсер) не сработают, если в нем есть одиночная кавычка. Теперь это обычно не проблема, так как большую часть времени вы делаете XHR, который извлекает некоторые данные, отформатированные как JSON, и вы используете responseText, который содержит вашу строку JSON, которую вы можете разобрать и т.д.
В этой конкретной ситуации у меня есть строка JSON, хранящаяся в базе данных в виде текста... поэтому в базе данных есть что-то вроде {"property":"value"}
, и я хочу вывести это как часть HTML-страницы, созданной сервером, чтобы Код JavaScript на этой странице выглядит примерно так:
var x = '{"property":"value"}';
Теперь, если строка JSON в базе данных содержит одну цитату вроде этого:
{"property":"val'ue"}
Затем мне нужно сбежать от него, иначе я никогда не смогу использовать его в виде строки:
console.clear();
var obj = {prop:"val'ue"};
var str = JSON.stringify(obj);
console.log("JSON string is %s",str);
console.dir(JSON.parse(str)); //No problem here
//This obviously can't work since the string is closed and it causes an invalid script
//console.dir(JSON.parse('{prop:"val'ue"}'));
//so I need to escape it to use a literal JSON string
console.dir(JSON.parse('{"prop":"val\'ue"}'));
Тогда возникает вопрос, почему {"prop":"val\'ue"}
не считается допустимой строкой JSON?