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

Javascript ajax响应数据中的unescape特殊字符,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我有一个数据类型为“json”的ajax请求 接收到的json(格式良好)包含换行的字符串 即{“a”:“x\\r\\nx”} 不幸的是,ajax done函数中的结果数据对象现在也包含该格式的换行符(“\\r\\n”) 我希望ajax结果数据对象中的所有字符串字段都被取消扫描,以便在本例中 data={a:“xNEWLINEx”} 有没有一个通用的方法来做到这一点?假设数据可能有嵌套数组和字典,每个数组和字典都包含可以有换行符(或其他转义特殊字符)的字符串。您可以使用替换: data.a =

我有一个数据类型为“json”的ajax请求

接收到的json(格式良好)包含换行的字符串

即{“a”:“x\\r\\nx”}

不幸的是,ajax done函数中的结果数据对象现在也包含该格式的换行符
(“\\r\\n”)

我希望ajax结果数据对象中的所有字符串字段都被取消扫描,以便在本例中

data={a:“xNEWLINEx”}


有没有一个通用的方法来做到这一点?假设数据可能有嵌套数组和字典,每个数组和字典都包含可以有换行符(或其他转义特殊字符)的字符串。

您可以使用
替换

data.a = data.a.replace('\\', '\');
您还可以使用
unescape
(警告:已弃用的):

文件:

对于对象:

for (var key in data) {
    data[key] = unescape(data[key]);
}
您可以尝试:

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"}
有关更多“\”信息,您可以尝试:

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

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

    // '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);
    }

请参见

我要求的是一个不依赖于了解数据结构的通用解决方案。假设数据在嵌套的数组和字典中包含许多字符串字段,并且任何此类字符串都可能包含换行符,这仍然以字符串中的斜杠结束。我想要的是那里的特色菜。我可以做data=data.replace(/\\+r\\+n/g,\\r\\n');这管用!但有一件事我不确定,在这样的替换之后,我们最终使用的字符串不再是有效的json-因为我们删除了转义,它现在包含特殊字符。。。然后,我们对非法的JSON字符串运行JSON.parse。。我认为这是不符合规定的。似乎仍然有效(至少在chrome中)@kofifus是的,获得{a:“x↵x“}(与您的问题中描述的{a:“x\r\nx”}不同),您需要这样做。替换(/\\+r\\+n/g,'\\r\\n')。但它仍然是一个有效的json。您可以使用JSON.stringify({“a”:“x↵为什么客户端不直接发送
{“a”:“x\r\nx”}