Java - чтение (JSON) данных из объекта S3 построчно - PullRequest
0 голосов
/ 03 мая 2019

У меня есть объект S3, который содержит строки JsonL. Я хочу читать этот объект построчно в Java, чтобы рекурсивно продолжать анализировать каждую строку (т. Е. Каждый json) в POJO и в конечном итоге преобразовывать содержимое объекта в список POJO.

Как я понимаю, AmazonS3.getObject().getObjectContent() возвращает поток к содержимому объекта. Мой следующий шаг - прочитать строку и преобразовать ее в строку, которую я затем смогу проанализировать в POJO. Я не уверен, как работать с этим InputStream, чтобы получать следующую строку в формате String.

Пример данных:

{"key1":"val", "key2":"val1", "key3":"val2"}
{"key1":"val3", "key2":"val4", "key3":"val5"}
{"key1":"val6", "key2":"val7", "key3":"val8"}

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Если вы можете себе это позволить, вы можете использовать библиотеки Джексона и упростить вашу реализацию:

Зависимость Maven

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>

Код

ObjectMapper mapper = new ObjectMapper();
MyObject obj = mapper.readValue(inputStream, MyObject.class);

Для применения этой логикик каждой строке затем переберите каждую строку, как объяснено здесь , и примените тот же метод readValue , который также перегружен для String.

0 голосов
/ 03 мая 2019

У вас есть много вариантов для преобразования InputStream в String.Взгляните здесь .

 String json = "{\"key1\":\"val\", \"key2\":\"val1\", \"key3\":\"val2\"}\n" +
        "{\"key1\":\"val3\", \"key2\":\"val4\", \"key3\":\"val5\"}\n" +
        "{\"key1\":\"val6\", \"key2\":\"val7\", \"key3\":\"val8\"}";

InputStream in = new ByteArrayInputStream(json.getBytes());

try (BufferedReader buffer = new BufferedReader(new InputStreamReader(in))) {
    buffer.lines().forEach(System.out::println);
}
...