Javascript:: JSON 解析不接受换行符?

Posted

技术标签:

【中文标题】Javascript:: JSON 解析不接受换行符?【英文标题】:Javascript:: JSON parse does not accept line breaks? 【发布时间】: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 呼叫甚至不会被评估,因为问题发生得更早。 【参考方案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 数据应该只从外部源加载。

【讨论】:

以上是关于Javascript:: JSON 解析不接受换行符?的主要内容,如果未能解决你的问题,请参考以下文章

换行分隔 JSON 格式所需的解析过滤器

JSON.parse 解析json字符串时,遇字符串换行符,解析失败

使用换行符解析 json 时出错

基于Javascript中的换行符解析子字符串中的文本区域

基于Javascript中的换行符解析子字符串中的文本区域

即使添加了另一个反斜杠,JSON 解析器仍然在换行符上失败