Java-逐行从S3对象读取(JSON)数据

时间:2019-05-03 13:35:52

标签: java amazon-s3 inputstream jsonlines

我有一个包含JsonL行的S3对象。我想用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 :(得分:0)

您有很多将InputStream转换为String的选项。看看here

 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);
}

答案 1 :(得分:0)

如果负担得起,可以使用jackson库并简化实现:

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);

要将此逻辑应用于每行,然后按照说明here在每行上循环,并应用相同的 readValue 方法,该方法也将为String重载。