为什么不能在javascript
中解析带有\n
字符的json
JSON.parse('{"x": "\n"}')
但是当你JSON.parse(JSON.stringify({"x" : "\n"}))
时,它是有效的。
http://www.jslint.com/说{"x": "\n"}
是有效的JSON。我想知道规范对此有何看法?
更新 对于标记此副本的人,这与“如何处理JSON中的换行符”不同。这个问题更多的是为什么不能在JSON中允许未转义的换行符。
答案 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
,然后再将此值分配给某个控件。