为啥斜线在 JSON 中是可转义字符? [复制]

Posted

技术标签:

【中文标题】为啥斜线在 JSON 中是可转义字符? [复制]【英文标题】:Why is the slash an escapable character in JSON? [duplicate]为什么斜线在 JSON 中是可转义字符? [复制] 【发布时间】:2011-05-14 23:21:21 【问题描述】:

可能重复:JSON: why are forward slashes escaped?

json.org 声明,正斜杠(又名solidus,/)可以转义:

"\/"

但是,未转义的斜杠也是有效的:

"/"

这背后的原因是什么?它来自javascript根源吗? (即,"</script>" 是基于浏览器的 Javascript 中的问题,请参阅 Douglas Crockford's comment)还是有其他原因?

【问题讨论】:

是的,没错。感谢您找到另一个。投票关闭它。 其他浏览的读者:你也会投票关闭它作为 1580647 的副本吗? 它确实起源于</script> 标签。您可以看到 JSON 规范的创始人 Douglas Crockford 提出了它的基本原理here。 【参考方案1】:

我刚刚在我的博客上发布了a review of this issue。我认为你是对的,这是唯一的原因。另请注意,斜杠是唯一允许转义的标准字符。

通常 JSON 编码器会做错并转义他们一路上找到的任何斜线,而只有 </script> 中的斜线应该被转义,也许所有与 JavaScript RegExp /<\/\w+/ 匹配的斜线都应该被转义,出于同样的原因。

编辑:再次修复博客链接

【讨论】:

嗯,很有趣。但是你也碰巧不知道这个假设的来源? "另请注意,斜线是唯一允许转义的标准字符。" 博客(链接)不起作用。 链接再次失效 我认为我更喜欢“错误”的 JSON 编码器,因为这会使事情更加一致。【参考方案2】:

看来,我的第一个想法是正确的。

'\/' === '/' 在 JavaScript 中,而 JSON almost 有效的 JavaScript。 但是,为什么 JSON 中不允许其他被忽略的转义符(如 \z)?

关键是阅读http://www.cs.tut.fi/~jkorpela/www/revsol.html,然后是http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.2。斜线转义的特性允许将 JSON 嵌入 HTML(作为 SGML)和 XML。

【讨论】:

像 \b 这样的东西在 JSON 中用于退格,允许 \z for z 会使事情变得混乱。

以上是关于为啥斜线在 JSON 中是可转义字符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

转义序列(反斜线)

linux 特殊符号怎样用sed替换

Java:为啥 \t 转义字符与 toString() 不一致? [复制]

为啥 Alamofire 4.4.0 将 JSON 字符串转换为转义的 JSON 字符串(Swift 3)?

idea还原转义json

PyMongo 和 Flask 的 Jsonify 包含转义斜线