1

我有一个包含 JsonL 行的 S3 对象。我想在Java中逐行读取这个对象,这样我就可以递归地将每一行(即每个json)解析为一个POJO,并最终将对象内容转换为一个POJO列表。

据我了解,AmazonS3.getObject().getObjectContent()将流返回到对象的内容。我的下一步是读取一行并将其转换为字符串,然后我可以将其解析为 POJO。我不确定如何对此进行操作InputStream以继续获取字符串格式的下一行。

样本数据 :

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

2 回答 2

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

为了将此逻辑应用于每一行,然后按照此处所述循环遍历每一行,并应用相同的readValue方法,该方法也为 String 重载。

于 2019-05-03T13:52:12.477 回答
0

您有很多将 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);
}
于 2019-05-03T13:43:10.463 回答