Преобразовать древовидный JsonNode в список плоских объектов

Есть JsonNode вида:

{
  "country": "Россия",
  "planet": {
    "planetName": "Земля"
  },
  "mainland": "Евразия",
  "cities": [ {
    "city": "Ростов",
    "peoples": [ {
      "name": "Иван"
    }, {
      "name": "Пётр"
    } ],
    "region": "Ростовская"
  }, {
    "city": "Воронеж",
    "peoples": [ {
      "name": "Сергей"
    }, {
      "name": "Дмитрий"
    } ],
    "region": "Воронежская"
  } ],
  "money": "Рубль"
}

Требуется сформировать список плоских объектов (желательно, список Map<String, Object>) вида:

[
  {
    "country": "Россия",
    "planetName": "Земля", 
    "mainland": "Евразия",
    "city": "Ростов",
    "name": "Иван",
    "region": "Ростовская",
    "money": "Рубль"
  },
  {
    "country": "Россия",
    "planetName": "Земля", 
    "mainland": "Евразия",
    "city": "Ростов",
    "name": "Пётр",
    "region": "Ростовская",
    "money": "Рубль"
  },
  {
    "country": "Россия",
    "planetName": "Земля", 
    "mainland": "Евразия",
    "city": "Воронеж",
    "name": "Сергей",
    "region": "Воронежская",
    "money": "Рубль"
  },
  {
    "country": "Россия",
    "planetName": "Земля", 
    "mainland": "Евразия",
    "city": "Воронеж",
    "name": "Дмитрий",
    "region": "Воронежская",
    "money": "Рубль"
  }
]

Пробовал писать рекурсивный метод, но он возвращает неполные объекты

private Map<String, Object> getPlain(Map<String, Object> map, JsonNode jsonNode,
                                     List<Map<String, Object>> resultList) {
    if (jsonNode.isObject()) {
        Iterator<Map.Entry<String, JsonNode>> fields = jsonNode.fields();
        fields.forEachRemaining(field -> {
            if (field.getValue().isValueNode()) {
                map.put(field.getKey(), field.getValue());
            } else {
                getPlain(map, field.getValue(), resultList);
            }
        });
    } else if (jsonNode.isArray()) {
        ArrayNode arrayField = (ArrayNode) jsonNode;
        arrayField.forEach(node -> {
            Map<String, Object> map1 = new LinkedHashMap<>(map);
            getPlain(map1, node, resultList);
        });
    }
    resultList.add(map);
    return map;
}

Ответы (0 шт):