Unescape специальные символы в данных ответа ajax
У меня есть запрос ajax с dataType: 'json'
Полученный (правильно сформированный) json содержит строки с экранами с новыми символами
i.e '{ "a" : "x\\r\\nx" }'
К сожалению, результирующий объект данных в выполняемой функции ajax теперь также содержит новую строку в этой форме ("\\r\\n")
Я хочу, чтобы все строковые поля в объекте данных результата ajax были unescaped, так что в этом случае я получу
data = { a:"xNEWLINEx" }
Есть ли общий способ сделать это? предположим, что данные могут иметь вложенные массивы и словари, каждая из которых содержит строки, которые могут иметь символы новой строки (или другие экранированные специальные символы)
Ответы
Ответ 1
Основываясь на ответе от yangguang, вот полное решение:
// 'unescape' all special characters in all strings in an object that was created from JSON (ie, ajax reply)
function jUnescape(obj) {
var j = JSON.stringify(obj);
['b', 'f', 'n', 'r', 't', 'u'].forEach(function(c) {
j=j.split('\\\\' + c).join('\\' + c);
});
j = j.split('\\\\\\"').join('\\"');
j = j.split('\\\\\\\\').join('\\\\');
return JSON.parse(j);
}
см. jsfiddle
Ответ 2
Вы можете использовать replace
:
data.a = data.a.replace('\\', '\');
Вы также можете использовать unescape
(Предупреждение: Устаревшее):
data.a = unescape(data.a);
Документы: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/unescape
Для объектов:
for (var key in data) {
data[key] = unescape(data[key]);
}
Ответ 3
вы можете попробовать:
var data = { a: "x\\r\\nx" };
data = JSON.parse(JSON.stringify(data));
console.log('data', data);
//Object {a: "x\r\nx"}
для более "\", вы можете попробовать:
var data = { a: "x\\\\r\\\\nx" };
data = JSON.stringify(data);
data = data.replace(/\\+r\\+n/g,'\\\\r\\\\n');
data = JSON.parse(data);
console.log('data', data);
//Object {a: "x\r\nx"}