Здесь я обнаружил две проблемы, во-первых, она не очень хорошо сформирована JSON. Это должно быть:
{
"distance":[
{
"weight": 60,
"unit": "km"
},
{
"weight": 100,
"unit": "m"
}
]
}
ИЛИ
[
{
"weight": 60,
"unit": "km"
},
{
"weight": 100,
"unit": "m"
}
]
Другое дело, вы не указали свой POJO четко. Вы можете добиться этого ответа несколькими способами. Для простоты я предполагаю простой Map
для него.
Однако сначала нам нужно сделать эту строку правильно сформированной.
String jsonStr = "\"distance\":[\n" +
" {\n" +
" \"weight\": 60,\n" +
" \"unit\": \"km\"\n" +
" },\n" +
" {\n" +
" \"weight\": 100,\n" +
" \"unit\": \"m\"\n" +
" }\n" +
"]";
jsonStr = jsonStr.substring(jsonStr.indexOf(":") + 1);
Создать класс:
@Data
public class Distance {
private Double weight;
private String unit;
}
Здесь я использовал lombok для получения и установки.
Разбор JSON строки в список из Distance
:
ObjectMapper objectMapper = new ObjectMapper();
List<Distance> distances = objectMapper.readValue(jsonStr, new TypeReference<List<Distance>>(){});
Теперь вы можете конвертировать этот список на ваш желаемый ответ. Для преобразования этого ответа в Map
:
Map<String, Double> response = distances.stream().collect(Collectors.toMap(Distance::getUnit, Distance::getWeight));
ИЛИ вы также можете преобразовать его в List<Pair<String, Double>>
:
List<Pair<String, Double>> response = new ArrayList<>();
distances.forEach(distance -> {
response.add(new Pair(distance.getUnit(), distance.getWeight()));
});
Счастливое кодирование ...