Как сохранить / извлечь из S3 As JSON - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь загрузить и извлечь данные из S3 через лямбду, однако в настоящее время он возвращает данные в виде строки.Как вернуть его в виде объекта JSON.

Например, это данные, которые я храню, путем ручной загрузки в S3:

{
«data»:[{ "encryptedString": "D31BKNI8yVwknKXadWIP9LSL06Oss9Xhc5qyZSBHTBDj8TQihTHjoinKJEoKRT03Pt8U / b81ZLxuSOJxw3MU + ZX / CgSolBUPWeH / gD6zA / yKR + aQ0vb / t3g1SysTaOiKK2i5cGuqy3FLbgenn2U43sYKpb97B9h / WKCjGISBsMw ="}]}

* +1008 *

Лямбда запускается с этим 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 "данные": [{

 15:26:46 "encryptedString": "D31BKNI8yVwknKXadWIP9LSL06Oss9Xhc5qyZSBHTBDj8TQihTHjoinKJEoKRT03Pt8U / b81ZLxuSOJxw3MU + ZX / CgSolBUPWeH / gD6zA / yKR + aQ0vb / t3g1SysTaOiKK2i5cGuqy3FLbgenn2U43sYKpb97B9h / WKCjGISBsMw ="

* *  тысяча двадцать один 15:26:46}] * +1022*

 15:26:46}

... тогда как каждая строка мне нужна как элемент JSON, который я могу затем проанализировать.

Я думаю, что мояпроблема больше в том, как я говорю S3, что он должен взять то, чтоЯ ввожу в виде JSON, а не просто текстовый файл, если это возможно.

1 Ответ

0 голосов
/ 16 апреля 2019

Найден ответ: 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...