2013-07-17 99 views
1

在JS,我有我的JSON字符串化字典(json2):json javascript:转义双引号? CONCAT JSON与其他字符串

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中的引号和m中的引号y_form。但是json是不是应该逃避双重qoutes?这不是它的一部分吗?或者我需要这样做?还是有其他一些方法?

+0

没有,你需要HTML编码它以及 – Petah

回答

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格式。然后,您将HTML嵌入到JSON中,因此您也需要将其转义为HTML。 (或者,正如我上面推荐的,绕过HTML并直接进行DOM操作)。

4

您需要为HTML字符串编码,使用正则表达式f.ex:

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

或者如果可能使用DOM操作。

0

你也可以使用escape,如果你只是想保持它在DOM:

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"} 
+0

Espace在JavaScript 1.5中已弃用,因此您不应该使用它。 – Nicolapps