我有一个带有dataType的ajax请求:' json'
收到的json(格式正确)包含转义换行符的字符串
i.e '{ "a" : "x\\r\\nx" }'
遗憾的是,ajax done函数中的结果数据对象现在还包含该格式的换行符("\\r\\n")
我希望ajax结果数据对象中的所有字符串字段都没有转义,所以在这种情况下我会得到
data = { a:"xNEWLINEx" }
是否有通用方法来执行此操作?假设数据可能有嵌套数组和字典,每个字典包含可以有换行符(或其他转义特殊字符)的字符串
答案 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"}