【问题标题】:JSON.parse with all double quotesJSON.parse 与所有双引号
【发布时间】:2020-05-20 05:16:21
【问题描述】:

我正面临以下代码 sn-p 的一个问题

我的情况是:

var lit = "{"foo":"test \\"1\\"","bar":"test 2"}";

console.log(lit);

var thaw2 = JSON.parse(lit);
console.log(thaw2);

由于 lit 对象中的双引号,我收到错误“意外标识符”。 我不能在这里把它改成单引号,有什么解决方案可以将该字符串转换为带有所有双引号的 json 对象吗?

任何帮助将不胜感激。

【问题讨论】:

  • 为什么开头的字符串文字无效?我会专注于解决这个问题,因为目前你的源代码无法正常工作 - 尝试“修复”损坏的代码将涉及并且很容易出错。
  • 你能用这个代替'{"foo": "test \\"1\\"", "bar": "test 2"}'
  • 当你说不能改成单引号的时候,是指根本不能改外引号还是不能用单引号?

标签: javascript json


【解决方案1】:

转义内部双引号。

var lit = "{\"foo\":\"test \\\"1\\\"\",\"bar\":\"test 2\"}";

console.log(lit);

var thaw2 = JSON.parse(lit);
console.log(thaw2);

【讨论】:

    【解决方案2】:

    对最外层边界使用单引号而不是双引号。

    var lit = '{"foo":"test \\"1\\"","bar":"test 2"}';
    
    console.log(lit);
    
    var thaw2 = JSON.parse(lit);
    console.log(thaw2);
    

    【讨论】:

      【解决方案3】:

      问题的原因:当双引号用于定义字符串并用作字符串的一部分时,它会被视为右引号。

      要解决这个问题: 选项 1:使用单引号来开始和结束字符串。

      var lit = '{"foo":"test \\"1\\"","bar":"test 2"}';
      

      如果你想在你的字符串中使用单引号,这将不起作用。 在这种情况下,请使用选项 2。

      选项 2:转义。 使用 \' 或 \" 转义字符

      Eg: var lit = '{\'foo\':"test \\"1\\"","bar":"test 2"}'; (Escaping single quote)
      var lit = "{\"foo\":\"test \\\"1\\\"\",\"bar\":\"test 2\"}"; (escaping double quote)
      

      【讨论】:

        猜你喜欢
        • 2010-10-27
        • 2017-02-26
        • 2016-02-28
        • 1970-01-01
        • 2013-03-11
        • 1970-01-01
        • 1970-01-01
        • 2013-04-15
        相关资源
        最近更新 更多