Преобразовать древовидный 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;
}