首页 > 解决方案 > 如何使用 JSON-B 反序列化未知属性?

问题描述

我正在尝试使用 Quarkus 的 JSON-B 实现反序列化以下 JSON(请参阅 API 文档)。

这里让我烦恼的是为多个 JSON 对象动态生成的数字键。我想将所有未知属性反序列化为Map<Long, MyObject>. 简单地在数据对象中声明一个 Map 是行不通的。

Jackson 似乎完全支持使用@JsonAnySetter注释的所需行为(请参阅文档)。

我能做的就是自己编写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", 
  ], 
}

标签: javajsonresteasyquarkusjsonb-api

解决方案


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

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


推荐阅读