Javascript JSON stringify无法使用replacer函数转义单引号

Javascript JSON stringify无法使用replacer函数转义单引号,javascript,json,Javascript,Json,我试图用\'替换json字符串值中的单引号,但是只有当我尝试使用replacer函数时,它才起作用 var myObj = { test: "'p'" } var replacer = function (key, value) { if (typeof value === 'string') return value.replace(/'/g, "\\'"); else return v

我试图用\'替换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);

但是,如果在像这样创建字符串之后只进行简单的替换,而不使用replacer函数

 var JSONstring = JSON.stringify(myObj).replace(/'/g, "\\'");
我用的正则表达式很好用

编辑-澄清-使用replace函数,输出值包含双反斜杠,如\\'p\\',这不是我所期望的


有人能解释一下吗?

JSON.stringify
对反斜杠进行编码

当您尝试在将采用JSON编码的字符串中插入反斜杠时,单个
\
将变为
\\

但是,当您解码时,JSON的双反斜杠将被解码为单反斜杠(我认为您将得到所需的结果)

如果您保留了准确的代码,然后在最后将
警报(…)
替换为

alert( JSON.parse( JSONstring ).test );
你得到

\'p\'

JSON.stringify
对反斜杠进行编码

当您尝试在将采用JSON编码的字符串中插入反斜杠时,单个
\
将变为
\\

但是,当您解码时,JSON的双反斜杠将被解码为单反斜杠(我认为您将得到所需的结果)

如果您保留了准确的代码,然后在最后将
警报(…)
替换为

alert( JSON.parse( JSONstring ).test );
你得到

\'p\'

值在字符串化之前传递给替换程序。当值字符串化时,替换程序的转义将被剥离

这就是为什么在json字符串化后调用replace()会起作用


值在字符串化之前传递给替换程序。当值字符串化时,替换程序的转义将被剥离

这就是为什么在json字符串化后调用replace()会起作用


我没有意识到我试图做的事情导致了无效的json,因为它都被包装在双引号中,我认为里面的内容无关紧要,并且被当作一个标签对待string@erotavlas是的,我没有提到,但实际上JSON带有“强制”单反斜杠不符合JSON规范。我没有意识到我试图做的事情导致了无效的JSON,因为它都被包装在双引号中,我认为里面的内容无关紧要,并且被当作一个标签对待string@erotavlas是的,我没有提到,但实际上JSON带有“强制”单个反斜杠不符合JSON规范。