在JSON.stringify中转义单引号

时间:2018-01-22 10:06:45

标签: json handlebars.js

我知道,我不需要它,但我认为我确实这样做了。

我希望在呈现之前有handlebarsjs 呈现的有效JS代码。 JS缩小工具只是缩小有效的JS文件并在运行中缩小处理时间。这是JS把手代码。

var stringsObj = JSON.parse('{{{ json stringsDataObj }}}');

如您所见,单引号使得该行代码成为有效的 JS代码。 handlebars帮助程序是:

function json(context) {
    return JSON.stringify(context);
}

问题是什么?好吧,stringObj中的一些项目碰巧有单引号

stringsDataObj = {
  "str1": "I'm here",
  "str2": "You're there"
}

当它出租时

var stringsObj = JSON.parse('"str1": "I'm here", "str2": "You're there"');

给出了JS错误

有没有办法逃避JSON.stringify中的单引号? 我尝试使用替换器功能,但没有成功。

3 个答案:

答案 0 :(得分:5)

这应该使单引号显示在浏览器中:

var final_string = JSON.stringify(context).replace(/[\/\(\)\']/g, "'");

答案 1 :(得分:1)

应该实际呈现的内容是:

var stringsObj = JSON.parse('{"str1": "I'm here", "str2": "You're there"}');

JSON是有效的Javascript代码,它在语法上是Javascript的一个子集。这意味着JSON.stringify正在输出有效的Javascript文字。您实际上并不需要经历生成JSON的复杂情况,然后确保它是有效的 Javascript字符串文字,然后使用JSON.parse进行解析。你这样做:

var stringsObj = {{{ json stringsDataObj }}};

呈现:

var stringsObj = {"str1": "I'm here", "str2": "You're there"};

哪个是有效的Javascript对象文字。

答案 2 :(得分:-1)

我用以下帮助

解决了我的问题
function json(context) {
    return JSON.stringify(context).replace(/[\/\(\)\']/g, "\\$&");
}

即,必须在字符串化之后完成转义。