我们想在 JVM 中解析JSON5文档,但GitHub 上可用的 JSON5 特定库似乎都支持很低。由于解析器通常会吸引安全漏洞,因此我们不希望使用尚未被社区广泛使用和审查的解析器。
这让我们产生了疑问: Jackson JSON 解析器的可选功能可以用来解析 JSON5 吗?
我们想在 JVM 中解析JSON5文档,但GitHub 上可用的 JSON5 特定库似乎都支持很低。由于解析器通常会吸引安全漏洞,因此我们不希望使用尚未被社区广泛使用和审查的解析器。
这让我们产生了疑问: Jackson JSON 解析器的可选功能可以用来解析 JSON5 吗?
通过启用以下可选的 Jackson 解析器功能:
ALLOW_UNQUOTED_FIELD_NAMES
ALLOW_TRAILING_COMMA
ALLOW_SINGLE_QUOTES
ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER
ALLOW_NON_NUMERIC_NUMBERS
ALLOW_JAVA_COMMENTS
ALLOW_LEADING_DECIMAL_POINT_FOR_NUMBERS
似乎可以支持 JSON5 的所有标题功能,除了:
Jackson 有许多可选功能,可以在解析器上启用,以使其解析方式更加宽松。
将这些解析器选项与 JSON5 的标题特性进行比较,我们发现支持以下内容:
对象键可能是 ECMAScript 5.1 IdentifierName。
✅ 支持该ALLOW_UNQUOTED_FIELD_NAMES
功能
对象可能有一个尾随逗号。
数组可能有一个尾随逗号。
✅ 两者都支持该ALLOW_TRAILING_COMMA
功能
字符串可以是单引号。
✅ 支持该ALLOW_SINGLE_QUOTES
功能
通过转义换行符,字符串可以跨越多行。
字符串可能包含字符转义。
✅ 这两个似乎都被 Jackson 的ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER
功能所支持,尽管在这里转义的含义或目的可能会略有不同。迪尔。
数字可能是 IEEE 754 正无穷大、负无穷大和 NaN。
✅ 支持该ALLOW_NON_NUMERIC_NUMBERS
功能
允许单行和多行注释。
✅ 支持该ALLOW_JAVA_COMMENTS
功能。
Jackson部分支持以下 JSON5 功能:
数字可能有前导或尾随小数点。
✅ 该功能支持前导小数点ALLOW_LEADING_DECIMAL_POINT_FOR_NUMBERS
。
⛔️ Jackson 似乎不支持尾随小数点。
目前(2021 年年中)似乎没有任何方法可以将 Jackson 配置为允许以下 JSON5 功能:
数字可以是十六进制。
数字可能有尾随小数点。
数字可能以明确的加号开头。
允许额外的空白字符。