我必须形成一个JSON字符串,其中一个值有新的行字符。这必须转义,然后使用AJAX调用发布。谁能建议一种用JavaScript转义字符串的方法?我没有使用jQuery。
当前回答
RegExp单行,使用这个函数:
function escapeJSON(string) {
return string.replace(/[\n"\&\r\t\b\f]/g, '\\$&');
}
其他回答
像你一样,我一直在寻找一些评论和帖子来替换我的JSON中包含html对象的特殊转义字符。
我的对象是删除JSON对象中的特殊字符,并渲染JSON对象内部的html。
以下是我所做的,希望使用起来非常简单。
首先我使用了JSON。stringify我的json对象和json。解析结果。
如:
JSON.parse(JSON.stringify(jsonObject));
它解决了我的问题,并使用纯Javascript。
我在我的一个Ajax调用中得到了相同的情况,其中JSON由于Textarea字段中的换行符抛出了一个错误。这里给出的解决方案对我没用。 所以我使用Javascript的.escape函数,它工作得很好。然后,为了从JSON中检索值,我使用.unescape进行了反转义。
在JSON.stringify上还有第二个参数。所以,更优雅的解决方案是:
function escape (key, val) {
if (typeof(val)!="string") return val;
return val
.replace(/[\"]/g, '\\"')
.replace(/[\\]/g, '\\\\')
.replace(/[\/]/g, '\\/')
.replace(/[\b]/g, '\\b')
.replace(/[\f]/g, '\\f')
.replace(/[\n]/g, '\\n')
.replace(/[\r]/g, '\\r')
.replace(/[\t]/g, '\\t')
;
}
var myJSONString = JSON.stringify(myJSON,escape);
根据user667073的建议,除了先重新排序反斜杠替换,并修复引号替换
escape = function (str) {
return str
.replace(/[\\]/g, '\\\\')
.replace(/[\"]/g, '\\\"')
.replace(/[\/]/g, '\\/')
.replace(/[\b]/g, '\\b')
.replace(/[\f]/g, '\\f')
.replace(/[\n]/g, '\\n')
.replace(/[\r]/g, '\\r')
.replace(/[\t]/g, '\\t');
};
最好使用JSON.parse(yourUnescapedJson);
推荐文章
- 在React Native中使用Fetch授权头
- 为什么我的球(物体)没有缩小/消失?
- 如何使用jQuery检测页面的滚动位置
- if(key in object)或者if(object. hasownproperty (key)
- 一元加/数字(x)和parseFloat(x)之间的区别是什么?
- angularjs中的compile函数和link函数有什么区别
- 删除绑定中添加的事件监听器
- 很好的初学者教程socket.io?
- HtmlSpecialChars在JavaScript中等价于什么?
- React: 'Redirect'没有从' React -router-dom'中导出
- 如何在React中使用钩子强制组件重新渲染?
- 我如何使用Jest模拟JavaScript的“窗口”对象?
- 我如何等待一个承诺完成之前返回一个函数的变量?
- 在JavaScript中根据键值查找和删除数组中的对象
- 使嵌套JavaScript对象平放/不平放的最快方法