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

标签 java json jackson jvm json5

我们想解析 JSON5 JVM 中的文档,但 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通过 jackson 的 ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER特征,尽管此处逃逸的含义或目的可能略有不同。迪奥。

    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.

    关于java - Jackson解析器可以用来解析JSON5吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68312227/

    相关文章:

    java - 使用 Jackson 反序列化时如何映射重复命名的字段?

    java - Jackson-all 下载 2.x 版本

    java - 在 SWT 中创建多个窗口

    python - 使用 ConfigObj 或 PyYaml 将字典对提取到交互式工作区中

    java - 从 SipSessionKey 中的 header 参数标记为 `null`

    javascript - 删除具有多个值的 Json 中的根节点

    具有整数键的 Ruby Hash 更改为字符串键

    java - 将 MongoDB ObjectId 序列化为字符串

    java - 空白位置查找

    java - 上传文件时出现 "Could not delete file C:\Users\..."错误