用str.replace制作一个好的json

时间:2011-10-20 13:09:01

标签: javascript regex json

我注意到如果我在通过json传递给php的输入框上加上双引号,json_decode将返回null。因此,我决定在制作我的json时用\"替换双引号。

因此,我有类似的东西:

var valueToSet = input.replace(/"/gi, '\\"');

上面的代码将""替换为\" ...这样可行,现在我可以输入以下内容:

Hello hi "" " " " ' ' '' ' ' ' """ 

没有破坏任何东西。但是,如果我输入的内容如下:

Hello hi "" \ "
它破了。我怎样才能包括上面的替换,斜线也被替换了?我应该用什么替换斜线?与\\

谢谢!

2 个答案:

答案 0 :(得分:2)

你不应该担心这些问题。我认为你手工制作JSON,而你应该使用专门的功能来处理这些细节。

  • YUI JavaScript库有一个JSON object,其JSON.stringify方法适用于所有浏览器,如果存在,将使用本机实现。
  • 较新的浏览器实现JSON.stringify(IE版本为8.0,Firefox版本为3.5,Chrome版本为4.0,Safari版本为4.0,Opera版本为10.5)
  • Douglas Crockford写了一篇JSON library
  • 在服务器端,PHP有json_encode
  • 支持任何其他服务器端语言,有关详细信息,请参阅json.org

要回答您的上一个问题,是的,\应该替换为\\,但同样应该由json_encode完成。

答案 1 :(得分:2)

在Javascript中创建JSON字符串通常是通过创建要转换为JSON的数组或对象,然后在其上运行stringify()方法来完成的。

例如:

var myData = {....some stuff here....};
var myJSON = JSON.stringify(myData);

有关详细信息,请参阅json.org上的此页:http://www.json.org/js.html

但请注意,并非所有浏览器都提供JSON字符串化和解析功能。如果您需要支持旧版浏览器,则可能需要使用库来添加此功能。 jQuery等库包括JSON编码功能,还有独立的JSON库。