Как сохранить/извлечь из S3 как JSON

Я пытаюсь загрузить и получить данные из 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, а не просто текстовый файл, если это возможно.

Я не понимаю. body — это строка JSON. Да, у него есть новые строки, но это все еще JSON. К чему вы пытаетесь добраться?

stdunbar 15.04.2019 20:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
1 791
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Найденный ответ заключается в том, чтобы получить объект, а затем получить содержимое в виде потока. Затем можно использовать 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

Другие вопросы по теме