2024 Clojure状态调查!分享您的想法。

欢迎!请参阅关于页面以了解更多信息。

0
data.json

在JSON字符串中,32个控制字符U+0000至U+001F绝对不允许以原始形式存在。

来自(链接:https://www.ecma-international.org/publications/standards/Ecma-404.htm 文本:ECMA-404)

bq. 所有字符都可以放在引号内,除了必须转义的字符:引号(U+0022),反斜杠(U+005C),以及控制字符U+0000至U+001F。

来自(链接:https://tools.ietf.org/html/rfc7159#section-7 文本:RFC 7159)

bq. 字符串以引号开始和结束。所有Unicode字符都可以放在引号内,除了必须转义的字符:引号,反斜杠,以及控制字符(U+0000至U+001F)。


`}(默认值),所有超出32-127范围的字符都用{{\uCAFE}}语法进行转义(或者对于特殊的空白情况,使用命名转义)。

然而,当向{{write}}或{{write-str}}函数提供
`

}时,一些控制字符以原始形式写入,从而导致无效的JSON。这是不正确的行为;无论用户提供什么选项,库都不应生成违反规范的JSON。
此补丁在提供

`

}时,仍会转义控制字符。

对控制字符范围的命名转义有一些特殊处理以排除它们 — {{write-string}}函数始终转义那些具有特殊转义名称的字符(8,9,10,12,13),因此需要特殊处理。


我没有对解析功能添加任何控制字符验证,遵循Postel定律

bq. [TCP]实现应遵循一个一般原则的鲁棒性:在自身的行为上要保守,在接收他人提供的内容上要宽容。

1 个答案

0
参考: https://clojure.atlassian.net/browse/DJSON-28(由 alex+import 报告)
...