我正在嘗試通過 lambda 從 S3 上傳和檢索數(shù)據(jù),但是它當(dāng)前將數(shù)據(jù)作為字符串返回。如何將其作為 JSON 對象返回。例如,這是我通過手動上傳到 S3 存儲的數(shù)據(jù):{"data": [ { "encryptedString": "D31BKNI8yVwknKXadWIP9LSL06Oss9Xhc5qyZSBHTBDj8TQihTHjoinKJEoKRT03Pt8U/b81ZLxuSOJxw3MU+ZX/CgSolBUPWeH/gD6zA/yKR+aQ0vb/t3g1SysTaOiKK2i5cGuqy3FLbgenn2U43sYKpb97B9h/WKCjGISBsMw=" } ] }使用以下 Java 代碼觸發(fā) 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 “數(shù)據(jù)”:[{? 15:26:46 "encryptedString": "D31BKNI8yVwknKXadWIP9LSL06Oss9Xhc5qyZSBHTBDj8TQihTHjoinKJEoKRT03Pt8U/b81ZLxuSOJxw3MU+ZX/CgSolBUPWeH/gD6zA/yKR+aQ0vb/t3g1SysTaOiKK2i5cGuqy3FLbgenn2U43sYKpb97B9h/WKCjGISBsMw="? 15:26:46 }]? 15:26:46 }...而我需要將每一行作為 JSON 的一個元素,然后我可以對其進(jìn)行解析。我認(rèn)為我的問題更多在于我如何告訴 S3 它應(yīng)該將我輸入的內(nèi)容作為 JSON 而不僅僅是一個文本文件,如果可以的話。
1 回答

小唯快跑啊
TA貢獻(xiàn)1863條經(jīng)驗 獲得超2個贊
發(fā)現(xiàn)答案是getObject,然后將內(nèi)容作為流獲取。然后可以使用杰克遜的 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
添加回答
舉報
0/150
提交
取消