如何使用java读取S3中的JSON文件
我在S3中有一个JSON文件url,我需要从中解析和提取信息。在java中如何做到这一点 我已经研究了一些主要用Python实现的功能,但无法用Java实现 我可以使用如何使用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文件 如何实
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);