【问题标题】:Javascript:: JSON parse does not accept line breaks?Javascript:: JSON 解析不接受换行符?
【发布时间】:2015-06-25 09:21:57
【问题描述】:

我写了一个示例代码只是为了解释我所追求的...

这是一个工作示例:

var json='{"hezi":"firstName","gangina":"lastName"}',
    obj=JSON.parse(json);

alert(obj.gangina);

这里是带有换行符和制表符的完全相同的代码(只是为了使代码更具可读性,因为在我的真实代码中 JSON 数组字符串是巨大的):

var json=
'
    {
        "hezi":"firstName",
        "gangina":"lastName"
    }
',
    obj=JSON.parse(json);

alert(obj.gangina);

我什至试图用:

    obj=JSON.parse(json.replace(/(\r\n|\n|\r|\t)/gm,""));

所以...从技术上讲,我可以通过压缩我的行(手动删除所有\r\n|\n|\r|\t)来解决这个问题,但我很确定不管美化我的代码,都有一个快速解决方案。

这里需要小调整...

【问题讨论】:

  • 你的第二个 json 是无效的字符串,因为 javascript 中的字符串不能有换行符。
  • 您似乎在假设 JavaScript 字符串中允许换行符的情况下工作。它们不是,除非用 \ 转义。
  • @jcubic 所以解决它的唯一方法是手动压缩它?
  • 压缩无关紧要,问题出在您的字符串定义中。请参阅下面 jehna1 的回答。
  • 它与 JSON 中的换行符无关。这是因为您在 JavaScript 文件中编写 JSON 字符串。您的 replace 呼叫甚至不会被评估,因为问题发生得更早。

标签: javascript arrays json object replace


【解决方案1】:

JavaScript 不接受没有转义的换行符。您可以通过转义换行符来解决此问题:

var json=
'\
    {\
        "hezi":"firstName",\
        "gangina":"lastName"\
    }\
',
obj=JSON.parse(json);

alert(obj.gangina);

【讨论】:

  • 我总是习惯于终止和连接字符串,对吧?
  • @php_nub_qq 然后我也是:)
  • @php_nub_qq 好吧,结果不一样。你不希望在那里换行。
  • @php_nub_qq 你也可以创建一个数组并加入空字符串;)
  • 优秀。谢谢!
【解决方案2】:

我想你想“漂亮地打印”长 JSON 字符串?

在这种情况下:您可以使用JSON.stringify 中的space 参数来显示格式化的长JSON 字符串。见MDN。例如:

var json = '{"hezi":"firstName","gangina":"lastName"}'
    obj = JSON.parse(json);

document.querySelector('#result').innerHTML = JSON.stringify(obj, null, ' ');
<pre id="result"></pre>

【讨论】:

    【解决方案3】:

    现在 Chrome 41+ 和 Firefox 34+ 支持 ES6 template strings。是时候了解它了。

    JSON.parse(`
       {
            "hezi":"firstName",
            "gangina":"lastName"
        }
    `);
    

    【讨论】:

    • 嗯...正如我在当前帖子的最后一句话中所说的那样:“这里需要进行一些小调整...”我想您是我一直在寻找的 DE 人!多谢兄弟! :}
    【解决方案4】:

    只是为了消除混乱。错误在这里:

    var json=
    '
        {
    

    在第 2 行,有一个引用:a string 的开头。然后是未转义的换行符。这会导致 SyntaxError 并且您的任何代码都不会被执行。特别是 JSON.parse 没有被执行。

    【讨论】:

      【解决方案5】:

      您需要使用换行符来实现此目的,但不建议转义,因为它很容易错误地转义一个空格,这会引发格式错误。

      使用..

      var json=
      '{'+
       '"hezi":"firstName",'+
       '"gangina":"lastName"'+
      '}',
          obj=JSON.parse(json);
      
      alert(obj.gangina);
      

      但我的问题是为什么首先使用 json,如果手动编码使用对象那么这不是问题,json 数据应该只从外部源加载。

      【讨论】:

        猜你喜欢
        • 2012-06-17
        • 1970-01-01
        • 2018-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-20
        相关资源
        最近更新 更多