我有一个包含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"}
答案 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重载。