为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 S3 存储/检索为 JSON

如何将 S3 存储/检索为 JSON

繁华开满天机 2022-10-07 15:30:52
我正在尝试通过 lambda 从 S3 上传和检索数据,但是它当前将数据作为字符串返回。如何将其作为 JSON 对象返回。例如,这是我通过手动上传到 S3 存储的数据:{"data": [ { "encryptedString": "D31BKNI8yVwknKXadWIP9LSL06Oss9Xhc5qyZSBHTBDj8TQihTHjoinKJEoKRT03Pt8U/b81ZLxuSOJxw3MU+ZX/CgSolBUPWeH/gD6zA/yKR+aQ0vb/t3g1SysTaOiKK2i5cGuqy3FLbgenn2U43sYKpb97B9h/WKCjGISBsMw=" } ] }使用以下 Java 代码触发 Lambda:public static void cryptoFromLambda(S3Event s3Event) {    System.out.println("Called from Lambda. Records are:");    s3Event.getRecords().forEach(e -> {        try {            String bucket = e.getS3().getBucket().getName();            String key = e.getS3().getObject().getKey().replace('+', ' ');            key = URLDecoder.decode(key, "UTF-8");            AmazonS3Client s3Client = new AmazonS3Client();            String body = s3Client.getObjectAsString(bucket, key);            System.out.println(body);        } catch (UnsupportedEncodingException ex) {            System.out.println(ex.toString());        }    });    System.out.println("end lambda");}CloudWatch 中的每一行都被打印... 15:26:46 { 15:26:46 “数据”:[{ 15:26:46 "encryptedString": "D31BKNI8yVwknKXadWIP9LSL06Oss9Xhc5qyZSBHTBDj8TQihTHjoinKJEoKRT03Pt8U/b81ZLxuSOJxw3MU+ZX/CgSolBUPWeH/gD6zA/yKR+aQ0vb/t3g1SysTaOiKK2i5cGuqy3FLbgenn2U43sYKpb97B9h/WKCjGISBsMw=" 15:26:46 }] 15:26:46 }...而我需要将每一行作为 JSON 的一个元素,然后我可以对其进行解析。我认为我的问题更多在于我如何告诉 S3 它应该将我输入的内容作为 JSON 而不仅仅是一个文本文件,如果可以的话。
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

发现答案是getObject,然后将内容作为流获取。然后可以使用杰克逊的 JsonParser 来解析流


S3Object s3Object = s3Client.getObject(bucket, key);

S3ObjectInputStream s3Stream = s3Object.getObjectContent();


ObjectMapper objectMapper = new ObjectMapper();

JsonFactory jsonFactory = objectMapper.getFactory();

JsonParser jsonParser = jsonFactory.createParser(s3Stream);


JsonParser.nextToken()...etc


查看完整回答
反对 回复 2022-10-07
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信