簡體   English   中英

Java - 逐行從S3對象讀取(JSON)數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM