如何使用JSON-B反序列化未知属性?

问题描述

我正在尝试使用Quarkus的JSON-B实现反序列化以下JSON(see API documentation)。

给我带来麻烦的是为多个JSON对象动态生成的数字键。我想将所有未知属性反序列化为Map<Long,MyObject>。仅仅在数据对象内部声明一个Map是行不通的。

杰克逊似乎使用@JsonAnySetter注释完全支持所需的行为(请参见documentation)。

我能做的是编写自己的JsonbAdapter来手动解析未知属性,但是对于这样一个简单的任务,这似乎是荒谬的工作。

如何使用JSON-B将未知的JSON属性反序列化为Map?

{
  "634": {
    "AT": {
      "av": -61.082,"ct": 314284,"mn": -94.58,"mx": -16.136
    },"First_UTC": "2020-09-07T15:29:16Z","HWS": {
      "av": 6.685,"ct": 156912,"mn": 0.452,"mx": 17.887
    },"Last_UTC": "2020-09-08T16:08:49Z","PRE": {
      "av": 775.846,"ct": 159956,"mn": 746.3902,"mx": 793.7311
    },"Season": "summer",},"635": { ... },"636": { ... },"638": { ... },"sol_keys": [
    "634","635","636","638",],}

解决方法

它不会直接回答您的问题,但是JSON-B并没有Jackson所具有的所有功能。

因此,如果您错过某个功能,则可以使用Jackson:它也是Quarkus世界中的头等公民。每个JSON-B扩展都有对应的Jackson。