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

Can the Jackson parser be used to parse JSON5?

我们想解析 JSON5 documents in the JVM, but the JSON5-specific libraries available on GitHub 似乎所有支持度都非常低。由于解析器通常会吸引安全漏洞,因此我们不希望使用尚未被社区广泛使用和审查的解析器。

这让我们想知道:Jackson JSON parser 的可选功能是否可以用于解析 JSON5?

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 有 a number of optional features 可以在解析器上启用它以使其解析方式更加宽松。

支持的功能

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

Object keys may be an ECMAScript 5.1 IdentifierName.

✅ 支持 ALLOW_UNQUOTED_FIELD_NAMES 功能

Objects may have a single trailing comma.

Arrays may have a single trailing comma.

ALLOW_TRAILING_COMMA 功能

均支持

Strings may be single quoted.

✅ 支持 ALLOW_SINGLE_QUOTES 功能

Strings may span multiple lines by escaping new line characters.

Strings may include character escapes.

✅ 这两个 appear to be supported 都是杰克逊的 ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER 特征,尽管这里转义的意义或目的可能略有不同。 DYOR.

Numbers may be IEEE 754 positive infinity, negative infinity, and NaN.

✅ 支持 ALLOW_NON_NUMERIC_NUMBERS 功能

Single and multi-line comments are allowed.

✅ 支持 ALLOW_JAVA_COMMENTS 功能。

部分支持的功能

Jackson 部分 支持以下 JSON5 功能:

Numbers may have a leading or trailing decimal point.

ALLOW_LEADING_DECIMAL_POINT_FOR_NUMBERS 功能支持前导小数点。

⛔️ Jackson 似乎不支持尾随小数点。

不支持的功能

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

Numbers may be hexadecimal.

Numbers may have a trailing decimal point.

Numbers may begin with an explicit plus sign.

Additional white space characters are allowed.