2012-01-17 34 views
0

我想直接将JavaScript对象转换为字符串。我使用下面的代码。将JavaScript对象转换为JSON字符串

var foo = {}; 
foo.test1 = test1; 
foo.test2 = test2; 
foo.test3 = test3; 

var jsonObj = JSON.stringify(foo); 

它工作正常,但它使用json2 JavaScript库。不过,我需要在不使用任何库的情况下以纯JavaScript方式执行此操作。我知道使用传递的参数创建json feed会像这样工作。

var jsonObj = "{\"test1\":\"" + test1+ "\",\"test2\":\"" + test2+ "\",\"test3\":\"" + test3+ "\"}"; 

但是,如果传递的参数(TEST1,TEST2和TEST3)包含双引号时就会产生问题。

实现此目标的最佳方法是什么?

谢谢

+1

为什么你不能使用库?尤其像json2.js这样的小而特殊的目的。 – Quentin 2012-01-17 09:31:41

+1

的确,您甚至可以将json2.js的缩小版与您的其他代码一起粘贴,您不必将其保存在单独的文件中。 – 2012-01-17 09:37:46

+0

如果您不打算支持非常旧的浏览器(或者像2001年那样构建的浏览器),则不需要包含json2.js。 – techfoobar 2012-01-17 09:52:53

回答

2

你应该通过对每个键和部件String.replace(/"/g, "\\\"")逃脱双引号。然而,为了这个工作,你需要保证你的JS对象只有简单的字符串/数字。请注意,json2库仅在JSON的本机实现不存在时才会使用;请注意,只有当JSON的本机实现不存在时才会使用json2库。 all modern browsers有内置的JSON支持(IE < 8是明显的例外)。

+1

如果字符串包含一个新行,将会失败 – Quentin 2012-01-17 09:34:35

+2

为什么要在正则表达式中转义双引号?它们在那里没有任何特殊的含义,只是增加了线路噪声。 – Quentin 2012-01-17 09:35:59

+1

@Quentin:因为它是一个字符串,我忘了删除它时,我把它改为一个正则表达式;) – Matt 2012-01-17 09:37:32

1

我认为你完全误解了JSON是什么。 JSON代表Javascript对象表示法。

你还没有意识到的是foo已经是一个对象,并且你进一步考虑了你将要编码的内容以访问jsonObj

这里的提示jsonObj.test1:看起来很熟悉不是吗?

你可能试图做的是创建一个看起来像JSON内容但实际上不是对象的字符串。但这是一个不同的问题。

希望这会有所帮助。

+0

是的我试图创建一个像json – Dilshan 2012-01-17 10:03:56

+1

这样的字符串,所以我可以假设你不会像对象一样使用'jsonObj'吗?你会只是将它打印到屏幕或其他东西? – T9b 2012-01-17 11:30:29

+0

我需要阅读属性 – Dilshan 2012-01-17 11:33:42

相关问题