unescape ajax响应数据中的特殊字符

时间:2015-05-21 06:41:32

标签: javascript jquery ajax json

我有一个带有dataType的ajax请求:' json'

收到的json(格式正确)包含转义换行符的字符串

i.e '{ "a" : "x\\r\\nx" }'

遗憾的是,ajax done函数中的结果数据对象现在还包含该格式的换行符("\\r\\n")

我希望ajax结果数据对象中的所有字符串字段都没有转义,所以在这种情况下我会得到

data = { a:"xNEWLINEx" }

是否有通用方法来执行此操作?假设数据可能有嵌套数组和字典,每个字典包含可以有换行符(或其他转义特殊字符)的字符串

3 个答案:

答案 0 :(得分:2)

基于阳光的回应,这是一个完整的解决方案:

    // '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

答案 1 :(得分:1)

您可以使用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]);
}

答案 2 :(得分:1)

你可以尝试:

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"}