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

问题描述 投票:0回答:2

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

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

java json jackson jvm json5
2个回答
24
投票

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
功能

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

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

✅ 这两个 似乎都得到杰克逊的 ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER

 功能的支持
,尽管这里逃脱的意义或目的可能略有不同。 DYOR.

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

✅ 支持

ALLOW_NON_NUMERIC_NUMBERS
功能

允许单行和多行评论。

✅ 支持

ALLOW_JAVA_COMMENTS
功能。

部分支持的功能

Jackson 部分支持以下 JSON5 功能:

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

ALLOW_LEADING_DECIMAL_POINT_FOR_NUMBERS
功能支持前导小数点。

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

不支持的功能

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

数字可以是十六进制的。

数字可能有尾随小数点。

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

额外的空白字符是允许的。


0
投票

Javascript开发者可以使用微软开发的jsonc-parser

jsonc-parser
可以在浏览器和 node.js 环境中使用。

这里有一个示例,演示如何使用“jsonc-parser”npm 包来解析 JSON5 字符串:

import * as jsonc from 'jsonc-parser';

const jsonString = `{
    // This is a JSON5 string!
    "name": 'John Doe',
    "age": 42,
    "isMarried": false,
    "pets": [
        {
            "name": 'Fluffy',
            "type": 'cat'
        }
    ]
}`;

const parsedJson = jsonc.parse(jsonString);

console.log(parsedJson);

在线演示:JSON5解析器

© www.soinside.com 2019 - 2024. All rights reserved.