Как десериализовать неизвестные свойства с помощью JSON-B?

#java #json #resteasy #quarkus #jsonb-api

#java #json #resteasy #quarkus #jsonb-api

Вопрос:

Я пытаюсь десериализовать следующий JSON (см. Документацию API), используя реализацию JSON-B от Quarkus.

Что меня беспокоит, так это динамически генерируемые цифровые ключи для нескольких объектов JSON. Я хочу десериализовать все неизвестные свойства в a Map<Long, MyObject> . Простое объявление карты внутри объекта данных не сработает.

Джексон, похоже, поддерживает именно желаемое поведение с помощью @JsonAnySetter аннотации (см. Документацию).

Что я мог бы сделать, так это написать свой собственный JsonbAdapter для разбора неизвестных свойств вручную, но это кажется загадочным объемом работы для такой простой задачи.

Как я могу десериализовать неизвестные свойства JSON на карту с помощью JSON-B?

 {
  "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", 
  ], 
}
  

Ответ №1:

Это не даст прямого ответа на ваш вопрос, но JSON-B не обладает всеми функциями, которые есть у Джексона.

Так что, если вы пропустите какую-то функцию, вы можете просто использовать Jackson: это первоклассный гражданин и в мире Quarkus. У нас есть аналоги Джексона для каждого расширения JSON-B.