Jackson解析器可以用来解析JSON5吗?

Gra*_*Lea 13 java json jvm jackson json5

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

这让我们想知道: Jackson JSON 解析器的可选功能可以用来解析 JSON5 吗?

Gra*_*Lea 28

太长了;博士

\n

通过启用以下可选的 Jackson 解析器功能:

\n
    \n
  • ALLOW_UNQUOTED_FIELD_NAMES
  • \n
  • ALLOW_TRAILING_COMMA
  • \n
  • ALLOW_SINGLE_QUOTES
  • \n
  • ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER
  • \n
  • ALLOW_NON_NUMERIC_NUMBERS
  • \n
  • ALLOW_JAVA_COMMENTS
  • \n
  • ALLOW_LEADING_DECIMAL_POINT_FOR_NUMBERS
  • \n
\n

似乎可以支持 JSON5 的所有标题功能,除了:

\n
    \n
  • 十六进制数
  • \n
  • 数字尾随小数点
  • \n
  • 数字前加号
  • \n
  • 额外的空白字符
  • \n
\n

细节

\n

Jackson 有许多可选功能,可以在解析器上启用这些功能,以使其解析方式更加宽松。

\n

支持的功能

\n

将这些解析器选项与 JSON5 的主要功能进行比较,我们发现支持以下内容:

\n
\n

对象键可以是 ECMAScript 5.1 IdentifierName。

\n
\n

\xe2\x9c\x85 支持该ALLOW_UNQUOTED_FIELD_NAMES功能

\n
\n

对象可能有一个尾随逗号。

\n
\n
\n

数组可以有一个尾随逗号。

\n
\n

\xe2\x9c\x85 均支持该ALLOW_TRAILING_COMMA功能

\n
\n

字符串可以用单引号引起来。

\n
\n

\xe2\x9c\x85 支持该ALLOW_SINGLE_QUOTES功能

\n
\n

字符串可以通过转义换行符来跨越多行。

\n

字符串可能包含字符转义。

\n
\n

\xe2\x9c\x85 这两个似乎都受到JacksonALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER功能的支持,尽管此处转义的含义或目的可能略有不同。迪尔

\n
\n

数字可以是 IEEE 754 正无穷大、负无穷大和 NaN。

\n
\n

\xe2\x9c\x85 支持该ALLOW_NON_NUMERIC_NUMBERS功能

\n
\n

允许单行和多行注释。

\n
\n

\xe2\x9c\x85 支持该ALLOW_JAVA_COMMENTS功能。

\n

部分支持的功能

\n

Jackson部分支持以下 JSON5 功能:

\n
\n

数字可能有前导或尾随小数点。

\n
\n

\xe2\x9c\x85 该功能支持前导小数点ALLOW_LEADING_DECIMAL_POINT_FOR_NUMBERS

\n

\xe2\x9b\x94\xef\xb8\x8f Jackson 似乎不支持尾随小数点。

\n

不支持的功能

\n

目前(2021 年中)似乎没有任何方法可以配置 Jackson 以允许以下 JSON5 功能:

\n
\n

数字可以是十六进制。

\n

数字可能有尾随小数点。

\n

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

\n
\n
\n

允许附加空白字符。

\n
\n