我们希望在JVM中解析JSON5文档,但GitHub上可用的JSON5 5专用库似乎都支持得很低。由于解析器通常是安全漏洞的磁铁,我们倾向于不使用尚未被社区广泛使用和检查的解析器。
这让我们想知道:Jackson JSON解析器的可选特性可以用来解析JSON5吗?
发布于 2021-07-09 06:32:00
tl;dr
通过启用以下可选的Jackson解析器特性:
ALLOW_UNQUOTED_FIELD_NAMESALLOW_TRAILING_COMMAALLOW_SINGLE_QUOTESALLOW_BACKSLASH_ESCAPING_ANY_CHARACTERALLOW_NON_NUMERIC_NUMBERSALLOW_JAVA_COMMENTSALLOW_LEADING_DECIMAL_POINT_FOR_NUMBERS似乎可以支持JSON5 5的所有标题功能,除了:
详细信息
Jackson有一些可选特性,它可以在解析器上启用,使解析器在解析方式上更加宽松。
支撑特征
将这些解析器选项与JSON5的标题特性进行比较,我们发现支持以下内容:
对象键可能是ECMAScript 5.1 IdentifierName。
ALLOW_UNQUOTED_FIELD_NAMES特性支持的✅
对象可能有一个尾随逗号。数组可能有一个尾随逗号。
ALLOW_TRAILING_COMMA特性支持的✅
字符串可以是单引号。
ALLOW_SINGLE_QUOTES特性支持的✅
字符串可以通过转义新行字符来跨越多行。 字符串可以包括转义字符。
这两个似乎是支持的都是杰克逊的ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER特性,尽管在这里转义的意义或目的可能会微妙地不同。都是。
数字可以是IEEE754正无穷大、负无穷大和NaN。
ALLOW_NON_NUMERIC_NUMBERS特性支持的✅
允许单行和多行注释。
ALLOW_JAVA_COMMENTS特性支持的✅。
部分支撑特征
杰克逊部分支持以下JSON5特性:
数字可能有前导小数点或尾随小数点。
ALLOW_LEADING_DECIMAL_POINT_FOR_NUMBERS特性支持✅前导小数点。
⛔️杰克逊似乎不支持尾随小数点。
不支持特征
目前(2021年年中)似乎没有任何方法来配置Jackson以允许以下JSON5特性:
数字可能是十六进制的。 数字可能有一个尾随小数点。 数字可以以显式加号开头。允许使用其他空白字符。
https://stackoverflow.com/questions/68312227
复制相似问题