带换行符的JSON.parse

时间:2015-04-16 05:29:08

标签: javascript json newline

为什么不能在javascript

中解析带有\n字符的json

JSON.parse('{"x": "\n"}')

但是当你JSON.parse(JSON.stringify({"x" : "\n"}))时,它是有效的。

http://www.jslint.com/{"x": "\n"}是有效的JSON。我想知道规范对此有何看法?

更新 对于标记此副本的人,这与“如何处理JSON中的换行符”不同。这个问题更多的是为什么不能在JSON中允许未转义的换行符。

4 个答案:

答案 0 :(得分:7)

JSON.parse('{"x": "\n"}')失败,因为'{"x": "\n"}'由于未转义的斜杠符号而不是有效的JSON字符串。

JSON.parse()需要有效的JSON字符串才能工作。

'{"x": "\\n"}'是一个有效的JSON字符串,因为斜杠现在已转义,因此JSON.parse('{"x": "\\n"}')将起作用。

JSON.parse(JSON.stringify({"x" : "\n"}))有效,因为JSON.stringify在内部转义了斜杠字符。

JSON.stringify({"x" : "\n"})的结果是{"x":"\n"},但是如果您尝试使用JSON.parse('{"x":"\n"})'解析它,它将失败,因为它没有被转义。当JSON.stringify返回转义字符时,JSON.parse(JSON.stringify())将起作用。

答案 1 :(得分:1)

需要:

JSON.parse('{"x": "\\n"}')

您必须使用\\来逃避角色。

  

为什么它无效?

它'来自 rfc4627 specs

除了必须转义的字符外,所有Unicode字符都可以放在引号内:引号,反向固定和控制字符(U + 0000到U + 001F)。"由于换行符是控制字符,因此必须对其进行转义。

答案 2 :(得分:0)

在JavaScript中"\n"不是文字字符串\n。它是一个包含换行符的字符串。这使您的JSON无效。

要表示文字字符串\n,您需要使用另一个反斜杠字符"\\n"来转义初始反斜杠字符。

答案 3 :(得分:0)

您需要转义字符串中的“\”(将其变为双精度 - “\\”),否则它将成为JSON来源中的换行符,而不是JSON data

尝试在解析时将\n替换为其他一些字符,然后再将这些字符替换为\n,然后再将此值分配给某个控件。

相关问题