JSON.parse with newline
JSON.parse with newline
为什么不能在javascript中解析带有\\n
字符的json?\nJSON.parse(\'{\"x\": \"\\n\"}\')
\n但是当你使用JSON.parse(JSON.stringify({\"x\" : \"\\n\"}))
时,是有效的。\nhttp://www.jslint.com/说{\"x\": \"\\n\"}
是有效的JSON。我想知道规范对此有什么说法。\n更新:\n对于那些将此问题标记为重复的人,这个问题与“如何处理JSON中的换行符”不同。这个问题更多地是关于为什么不能在JSON中允许未转义的换行符。
在这个问题中,我们需要将一个包含换行符的字符串转换为JSON对象。正确的写法是使用双反斜杠进行字符转义,例如:JSON.parse('{"x": "\\n"}')
。这是因为根据rfc4627规范,在引号内可以放置所有Unicode字符,但必须对引号、反斜杠和控制字符(U+0000到U+001F)进行转义。由于换行符是一个控制字符,因此必须进行转义。
为了解决这个问题,我们需要在字符串中的换行符前添加双反斜杠进行转义。这样,JSON解析器才能正确地将字符串转换为JSON对象。在上面的例子中,我们使用JSON.parse('{"x": "\\n"}')
将字符串"\\n"
转换为包含换行符的JSON对象。
这种转义方法可以应用于其他需要转义的字符,例如引号或其他特殊字符。通过使用双反斜杠进行转义,我们可以确保JSON解析器能够正确地解析包含特殊字符的字符串。
在这个问题中,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())
会成功执行。