繁体   English   中英

为什么在JSON标准的字符串中不允许双引号和反斜杠?

[英]Why aren't double quotes and backslashes allowed in strings in the JSON standard?

如果我在Chrome或Firebug的JavaScript控制台中运行此程序,则效果很好。

JSON.parse('"\u0027"') // Escaped single-quote

但是,如果我在Javascript控制台中运行这两行中的任何一行,则会引发错误。

JSON.parse('"\u0022"') // Escaped double-quote
JSON.parse('"\u005C"') // Escaped backslash

RFC 4627第2.5节似乎暗示只要正确转义就允许使用\\"字符。但是,我尝试过的2种浏览器似乎不允许这样做。但是,我做错了什么吗?在这里还是真的不允许它们在字符串中?我也尝试过分别使用\\"\\\\代替"\\

我觉得我做错了什么,因为我很难相信JSON不允许在字符串中使用这些字符,特别是因为规范似乎没有提到我可以发现说不允许使用的任何内容。

您需要引用反斜杠!

我们称之为玫瑰的

用别的名字闻起来会很甜

无论您如何在字符串常量中表达双引号,双引号都是双引号。 如果在常量中的\\u\u003c/code>表达式前加上反斜杠,则效果就是反斜杠引号的双引号,实际上就是您所拥有的。

关于您的问题最有趣的事情是,它可以帮助我认识到我编写的每个JavaScript字符串解析器都是错误的。

JavaScript会在到达JSON解析器之前解释Unicode转义序列。 这带来了一个问题:

  • 第一次未用JavaScript引用'"\'"'"'"
    第二次(通过JSON解析器)作为有效JSON表示字符串: '

  • 第一次未用JavaScript '"""'"""
    JSON解析器将此未加引号的版本"""视为无效JSON(不希望最后一个引号)。

  • 第一次未用引号将'"\\"' (通过JavaScript): "\\"
    JSON解析器还将未加引号的版本"\\"视为无效的JSON(第二个引号用反斜杠转义,因此不会终止字符串)。

解决此问题的方法是转义转义序列,如\\\\u....实际上,您可能只是不使用JSON解析器。 在正确的上下文中使用(通过将其包装在括号中可确保所有JSON是有效的JavaScript。

您没有在转义反斜杠和双引号,因为\\ u00xx被javascript解析器解释。

JSON.parse('"\\\u0022"')
JSON.parse('"\\\""')

JSON.parse('"\\\u005C"')
JSON.parse('"\\\\"')

按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM