如何将S3作为JSON存储/检索

时间:2019-04-15 15:34:23

标签: java json amazon-s3 aws-lambda

我正在尝试通过lambda从S3上传和检索数据,但是当前它以字符串形式返回数据。如何将其作为JSON对象返回。

例如,这是我正在存储的数据,通过手动上传到S3:

  

{
  “数据”:[   {       “ encryptedString”:“ D31BKNI8yVwknKXadWIP9LSL06Oss9Xhc5qyZSBHTBDj8TQihTHjoinKJEoKRT03Pt8U / b81ZLxuSOJxw3MU + ZX / CgSolBUPWeH / gD6zA / yKRBnK9B1Q2Y1B   }]   }

Lambda通过以下Java代码触发:

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“数据”:[{

     

十五时26分46秒 “encryptedString”: “D31BKNI8yVwknKXadWIP9LSL06Oss9Xhc5qyZSBHTBDj8TQihTHjoinKJEoKRT03Pt8U / b81ZLxuSOJxw3MU + ZX / CgSolBUPWeH / gD6zA / YKR + aQ0vb / t3g1SysTaOiKK2i5cGuqy3FLbgenn2U43sYKpb97B9h / WKCjGISBsMw =”

     

15:26:46}]

     

15:26:46}

...而我需要将每一行作为JSON的元素,然后可以对其进行解析。

我认为我的问题更多在于如何告诉S3,如果可能的话,它应该将我输入的内容作为JSON而不是文本文件。

1 个答案:

答案 0 :(得分:0)

找到的答案是getObject,然后将内容作为流获取。然后可以使用Jackson的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