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

Ответ 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"}