Я пытаюсь загрузить и получить данные из S3 через лямбда, однако в настоящее время он возвращает данные в виде строки. Как мне вернуть его как объект JSON.
Например, это данные, которые я сохраняю путем ручной загрузки на S3:
{
"data": [ { "encryptedString": "D31BKNI8yVwknKXadWIP9LSL06Oss9Xhc5qyZSBHTBDj8TQihTHjoinKJEoKRT03Pt8U/b81ZLxuSOJxw3MU+ZX/CgSolBUPWeH/gD6zA/yKR+aQ0vb/t3g1SysTaOiKK2i5cGuqy3FLbgenn2U43sYKpb97B9h/WKCjGISBsMw = " } ] }
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 "data": [{
15:26:46 "encryptedString": "D31BKNI8yVwknKXadWIP9LSL06Oss9Xhc5qyZSBHTBDj8TQihTHjoinKJEoKRT03Pt8U/b81ZLxuSOJxw3MU+ZX/CgSolBUPWeH/gD6zA/yKR+aQ0vb/t3g1SysTaOiKK2i5cGuqy3FLbgenn2U43sYKpb97B9h/WKCjGISBsMw = "
15:26:46 }]
15:26:46 }
... тогда как мне нужна каждая строка как элемент JSON, который я затем могу проанализировать.
Я думаю, что моя проблема больше в том, как я говорю S3, что он должен принимать то, что я ввожу, как JSON, а не просто текстовый файл, если это возможно.




Найденный ответ заключается в том, чтобы получить объект, а затем получить содержимое в виде потока. Затем можно использовать 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
Я не понимаю.
body— это строка JSON. Да, у него есть новые строки, но это все еще JSON. К чему вы пытаетесь добраться?