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

时间:2017-05-02 17:10:56

标签: javascript json

我正在尝试用\'替换我的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 \\',这不是我所期待的

任何人都能解释一下吗?

2 个答案:

答案 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