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.
我们想解析 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.