Как преобразовать список объектов JSON в список строк Pojo, который содержит поле из каждого объекта? - PullRequest
0 голосов
/ 27 августа 2018

У меня есть документ JSON, в котором описывается список объектов, он выглядит примерно так:

[
   {
     "txId": "ffff",
     "sender" : "0xwwwwwww",
     "recepient" : "0xeferfef"
   },
   {
     "txId": "ffff",
     "sender" : "0xwwwwwww",
     "recepient" : "0xeferfef"
   }
   ...

   ...
]

Как я могу получить List<String>, который содержит txId значений от каждого объекта, используя только API Джексона (без преобразования этого JSON в список объектов pojo, затем продолжить этот список по foreach и создать новый список строк)?

1 Ответ

0 голосов
/ 27 августа 2018

Вы всегда можете прочитать документ JSON как объект JsonNode с помощью Jackson API (не нужно создавать POJO). Далее, есть несколько способов чтения и манипулирования данными, представленными как JsonNode объект. Одним из наиболее удобных способов, доступных в Java 8+, является создание java.util.Stream<JsonNode> и сбор окончательного списка в результате сопоставления от JsonNode до String, где String представляет значение node.txId поле.

Вы можете создать java.util.Stream<JsonNode> с помощью :

java.util.stream.StreamSupport.stream(jsonNode.spliterator(), false)

и затем вы можете позвонить map(node -> node.get("txId").textValue() и, наконец, позвонить collect(), чтобы завершить поток и получить ожидаемый результат.

Рассмотрим следующий код в качестве примера (требуется Java 8+):

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

final class JacksonReadExample {

    public static void main(String[] args) throws IOException {

        final String json = " [\n" +
                "   {\n" +
                "     \"txId\": \"ffff-001\",\n" +
                "     \"sender\" : \"0xwwwwwww\",\n" +
                "     \"recepient\" : \"0xeferfef\"\n" +
                "   },\n" +
                "   {\n" +
                "     \"txId\": \"ffff-002\",\n" +
                "     \"sender\" : \"0xwwwwwww\",\n" +
                "     \"recepient\" : \"0xeferfef\"\n" +
                "   }\n" +
                "]";

        final ObjectMapper mapper = new ObjectMapper();

        final JsonNode jsonNode = mapper.readTree(json);

        final List<String> ids = StreamSupport.stream(jsonNode.spliterator(), false)
                .map(node -> node.get("txId").textValue())
                .collect(Collectors.toList());

        System.out.println(ids);
    }
}

Выход:

[ffff-001, ffff-002]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...