我正在尝试用\'替换我的json字符串值中的单引号,但是只有当我尝试使用replacer函数时它才起作用。
var myObj = {
test: "'p'"
}
var replacer = function (key, value) {
if (typeof value === 'string')
return value.replace(/'/g, "\\'");
else return value;
};
var JSONstring = JSON.stringify(myObj, replacer, ' ');
alert(JSONstring);
https://jsfiddle.net/4fsqozek/1/
但是,如果我在不使用替换函数
的情况下创建字符串之后只进行简单替换 var JSONstring = JSON.stringify(myObj).replace(/'/g, "\\'");
我使用的正则表达式工作正常。
编辑 - 澄清 - 使用replacer函数输出值包含双反斜杠,如\\'p \\',这不是我所期待的
任何人都能解释一下吗?
答案 0 :(得分:2)
JSON.stringify
对反斜杠进行编码
请参阅How do I retain backslashes in strings when using JSON.stringify?
当您尝试在将进行JSON编码的字符串中插入反斜杠时,单个\
将变为\\
但是,您将解码 JSON双反斜杠\\
,然后将被解码为单\
(我认为您最终会获得所需的结果)。
如果您保留了确切的代码,那么最后将alert(...)
替换为
alert( JSON.parse( JSONstring ).test );
你得到了
\'p\'
答案 1 :(得分:0)
在字符串化之前,该值将传递给replacer。当值被字符串化时,删除了替换器的转义。
这就是在json被字符串化之后调用replace()的原因。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify