【问题标题】:Making a good json with str.replace用 str.replace 制作一个好的 json
【发布时间】:2011-12-11 19:01:13
【问题描述】:

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

因此,我有类似的东西:

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

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

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

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

Hello hi "" \ "

它坏了。如何在上述替换中包含斜杠也被替换?我应该用什么替换斜线? \\ ?

谢谢!

【问题讨论】:

    标签: javascript regex json


    【解决方案1】:

    您不必担心这些问题。我认为您正在手动构建 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是因为你是对的;他确实应该使用编码功能,而不是尝试手动构建它。但是,您已经给了他 PHP 的答案,他并没有问如何在 PHP 中做到这一点。
    • @Spudley,编辑了我的答案并给了你+1,因为 luquita 可能正在 JS 中构建 JSON。干杯
    【解决方案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 库可用。

    【讨论】:

      猜你喜欢
      • 2013-12-21
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 2020-10-07
      • 2014-04-17
      • 1970-01-01
      相关资源
      最近更新 更多