[英]Java - Read (JSON) data from S3 object line by line
我有一個包含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"}
您有很多選項可以將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);
}
如果你負擔得起,你可以使用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重載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.