3

我们想在 JVM 中解析JSON5文档,但GitHub 上可用的 JSON5 特定库似乎都支持很低。由于解析器通常会吸引安全漏洞,因此我们不希望使用尚未被社区广泛使用和审查的解析器。

这让我们产生了疑问: Jackson JSON 解析器的可选功能可以用来解析 JSON5 吗?

4

1 回答 1

10

tl;博士

通过启用以下可选的 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 功能:

数字可以是十六进制。

数字可能有尾随小数点。

数字可能以明确的加号开头。

允许额外的空白字符。

于 2021-07-09T06:32:00.557 回答