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 解析不接受换行符?的主要内容,如果未能解决你的问题,请参考以下文章