json javascript:转义双引号? concat json和其他字符串

时间:2013-07-17 09:51:20

标签: javascript json

在JS中,我有一个字典,我用json(json2)字符串化:

my_dict = {"1":"hi you'll", "2":"hello"};
as_string = JSON.stringify(my_dict);

我需要将此值作为值添加到表单中,但表单本身以字符串开头:

var my_form = '<form><input value = "'+as_string+'"></form>'

my_form是一个字符串,因为它作为DOM添加到文档中(创建节点,添加innerHTML,插入文档中)

问题是双引号搞砸了 - my_dict中有引号,my_form中引用了引号。但是,json应该是逃避双重qoutes吗?这不是它的作用吗?或者我需要这样做吗?还是有其他方法吗?

3 个答案:

答案 0 :(得分:4)

您需要使用RegExp编码HTML,f.ex的字符串:

as_string = JSON.stringify(my_dict).replace(/\"/g,'&quot;');

如果可能,请使用DOM操作。

答案 1 :(得分:3)

  

my_form是一个字符串,因为它作为DOM添加到文档中(创建节点,添加innerHTML,插入文档中)

通过粉碎字符串来生成代码比使用它更值得痛苦。不要这样做。使用标准DOM,而不是innerHTML。这将为你逃避。

 var frm = document.createElement('form');
 var ipt = document.createElement('input');
 ipt.value = as_string;
 frm.appendChild(ipt);
  

但是json应该逃脱双重qoutes吗?

编码为JSON将转义JSON格式的引号。然后,您将JSON嵌入到HTML中,因此您也需要将其转义为HTML。 (或者,正如我上面推荐的那样,绕过HTML并直接进行DOM操作)。

答案 2 :(得分:0)

如果您只想将其保留在DOM中,也可以使用escape

my_dict = {"1":"hi you'll", "2":"hello"};
as_string = escape(JSON.stringify(my_dict));

// as_string : %7B%221%22%3A%22hi%20you%27ll%22%2C%222%22%3A%22hello%22%7D

&安培;当你收到价值时,unescape

as_string = unescape(as_string)

// as_string : {"1":"hi you'll","2":"hello"}