В моем ответе сделаны некоторые предположения, поскольку мне пришлось заполнить довольно существенные пробелы в вашем вопросе:
- Пользователь введет текстовую строку в текстовое поле;
- Ваш скрипт будет читать содержимое текстового поля и использовать его как значение одного из элементов в строящейся JSON-строке;
- Сценарий отправляет полученную в результате строку JSON вкаким-то образом.
Если я правильно понял, давайте продолжим ...
Базовый код
Итак, с некоторыми заполнителями, вы 'выполняется:
function get_contents_of_textbox() {
// Dummy data for example
return 'My mum pushed and I said "Hello World"!';
}
function send_to_server(json_str) {
// Dummy action: display JSON string
console.log(json_str);
}
var myVal = get_contents_of_textbox();
var JSON = '{ "test": "' + myVal + '" }';
send_to_server(JSON);
Начальная попытка
Чтобы убедиться, что JSON
допустимый, escape любые кавычки и обратные слэши, которые он может содержать.Вы уже дали ему ход:
myVal = myVal.replace('"', "\\\"");
и результат вашей попытки :
{ "test": "My mum pushed and I said \"Hello World"!" }
Только первая кавычка была экранирована.Это связано с тем, что по умолчанию заменяется только один экземпляр строки поиска.
Документация Mozilla говорит :
Чтобы выполнить глобальный поиск и заменить, либовключите флаг g в регулярное выражение или, если первый параметр является строкой, включите g в параметр flags.
Рабочая попытка
К сожалению, flags
параметр нестандартный, поэтому давайте переключимся на версию регулярного выражения replace
и используем в ней переключатель /g
:
myVal = myVal.replace(/"/g, '\\"');
(вы заметите, что я также сжалзамена строки, для краткости.)
Результат:
{ "test": "My mum pushed and I said \"Hello World\"!" }
Полное решение
Давайте также добавим логику, чтобы избежать обратной косой черты, и в итоге получим следующее:
function get_contents_of_textbox() {
// Dummy data for example
return 'My mum pushed [a back\\slash] and I said "Hello World"!';
}
function send_to_server(json_str) {
// Dummy action: display JSON string
console.log(json_str);
}
var myVal = get_contents_of_textbox();
myVal = myVal.replace(/\\/g, '\\\\'); // escape backslashes
myVal = myVal.replace(/"/g, '\\"'); // escape quotes
var JSON = '{ "test": "' + myVal + '" }';
send_to_server(JSON);
Результат:
{ "test": "My mum pushed [a back\\slash] and I said \"Hello World\"!" }