Как объявить java bean для приведенной ниже структуры json

У меня ниже ответ json как часть ответа веб-службы, где имя внутреннего объекта - это значение, которое является динамическим. Не могу понять, как объявить эквивалентный java bean ...

{
  "error": [
    {
      "fea09b93175b626e4bb3d248ccb890bc": {
        "name": "80_5595_10.zip (5.0)",
        "error": [
          "Location path does not exist"
        ]
      }
    },
    {
      "5a8745c1967adabe9d492d3595f37ce1": {
        "name": "80_7208_01.zip (5.0)",
        "error": [
          "Location path does not exist"
        ]
      }
    }
] 

Возможный дубликат Джексон - Де-сериализация json с динамическим ключом

Andrei Sfat 25.03.2018 08:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
46
1

Ответы 1

Вы могли бы сделать это таким же образом (пример с использованием Джексона). Я объявил bean следующим образом:

class Error {
    String id;
    String name;
    List<String> error;

    // Getters / Setters

    @Override
    public String toString() {
       return "id = "+id+", name = "+name+", error = "+error;
    }
}

Ваша структура JSON - Map<String, List<Map<String, Error>>>

// Parse your JSON into a Map<String, List<Map<String, Error>>>
ObjectMapper mapper = new ObjectMapper();
Map<String, List<Map<String, Error>>> map =
    mapper.readValue(json, new TypeReference<Map<String, List<Map<String, Error>>>>() {});

Теперь у вас есть эта структура карты

{ error = [
    { fea09b93175b626e4bb3d248ccb890bc = Error@36d64342 }, 
    { 5a8745c1967adabe9d492d3595f37ce1 = Error@39ba5a14 }
  ]
}

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

List<Map<String, Error>> errorsMap = map.get("error");
List<Error> errors = new ArrayList<>();
for(Map<String, Error> errorMap : errorsMap) {
    String key = new ArrayList<>(errorMap.keySet()).get(0);
    Error error = errorMap.get(key);
    error.setId(key);
    errors.add(error);
}

errors.forEach(System.out::println);

Выходы:

id=fea09b93175b626e4bb3d248ccb890bc, name=80_5595_10.zip (5.0), error=[Location path does not exist]
id=5a8745c1967adabe9d492d3595f37ce1, name=80_7208_01.zip (5.0), error=[Location path does not exist]

Другие вопросы по теме