如何使用java读取S3中的JSON文件

如何使用java读取S3中的JSON文件,java,json,amazon-web-services,parsing,amazon-s3,Java,Json,Amazon Web Services,Parsing,Amazon S3,我在S3中有一个JSON文件url,我需要从中解析和提取信息。在java中如何做到这一点 我已经研究了一些主要用Python实现的功能,但无法用Java实现 我可以使用 S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, key)); InputStream objectData = object.getObjectContent(); 但我不想下载文件并保存它。我只需要能够使用解析这个JSON文件 如何实

我在S3中有一个JSON文件url,我需要从中解析和提取信息。在java中如何做到这一点

我已经研究了一些主要用Python实现的功能,但无法用Java实现

我可以使用

S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, key));
InputStream objectData = object.getObjectContent();
但我不想下载文件并保存它。我只需要能够使用解析这个JSON文件


如何实现这一点?

S3是一个blob存储,它无法为您解析文件。如果您想解析AWS端的数据,最好将文件存储在DynamoDB中,DynamoDB可以理解json文档

如果这不是一个选项,那么你的思路是正确的。只需将输入流转换为json文件,然后在内存中解析它。不需要在任何时候将文件实际写入磁盘。除非它是一个巨大的文件,否则你应该可以在内存中完成它,没有问题。

(只需扩展上面给出的注释。)

按照中的方法,我们可以有如下方法:

private static String getAsString(InputStream is) throws IOException {
    if (is == null)
        return "";
    StringBuilder sb = new StringBuilder();
    try {
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(is, StringUtils.UTF8));
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
        }
    } finally {
        is.close();
    }
    return sb.toString();
}
然后调用此方法,如下所示:

S3Object o = s3.getObject(bucketName, key);
S3ObjectInputStream s3is = o.getObjectContent();
String str = getAsString(s3is);
格雷德尔先生

implementation group: 'com.amazonaws', name: 'aws-java-sdk-s3', version: '1.11.705'
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
implementation group: 'commons-io', name: 'commons-io', version: '2.6'

有点晚了,但我会把这个答案留在这里,以防其他人遇到这个问题

如果您不局限于使用Gson,那么我建议您改用Jackson的ObjectMapper

步骤1: 将Jackson依赖项添加到项目中

// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.3'
步骤2: 创建一个表示要解析的JSON流的普通旧Java对象(POJO)。 例如:

Class Item {
  
  public Item() { }

  private Integer id;
  private String name;
  ....
  // getters and setters

步骤3: 创建一个ObjectMapper实例,并将JSON中的值读取到POJO类的实例中

ObjectMapper objectMapper = new ObjectMapper();
S3Object s3Object = amazonS3.getObject(new GetObjectRequest(bucketName, key));
Item item = objectMapper.readValue(s3Object.getObjectContent(), Item.class);

如果不是很大的文件,可以使用InputStreamReader读取内存中的数据并将其转换为有效的Json<代码>尝试(BufferedReader reader=new BufferedReader(new InputStreamReader(s3Object.getObjectContent()){s3Data=reader.lines().collect(Collector.joining(“\n”);}它是文本文件吗?它是什么类型的文件?您能使用BufferReader打印行吗?
ObjectMapper objectMapper = new ObjectMapper();
S3Object s3Object = amazonS3.getObject(new GetObjectRequest(bucketName, key));
Item item = objectMapper.readValue(s3Object.getObjectContent(), Item.class);