Javascript ajax响应数据中的unescape特殊字符
我有一个数据类型为“json”的ajax请求 接收到的json(格式良好)包含换行的字符串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 =
即{“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”}
?