16

ストリーミングが有効になっている Dynamodb テーブルがあります。また、AWS Lambda 関数を呼び出すこのテーブルのトリガーも作成しました。このラムダ関数内で、Dynamodb ストリームから新しいイメージ (変更後の Dynamodb アイテム) を読み取ろうとしており、そこから純粋な json 文字列を取得しようとしています。私の質問は、ストリーム経由で送信された DynamoDB アイテムの純粋な json 文字列を取得するにはどうすればよいですか? 以下のコード スニペットを使用して新しい画像を取得していますが、json 文字列を取得する方法がわかりません。あなたの助けに感謝。

public class LambdaFunctionHandler implements RequestHandler<DynamodbEvent, Object> {

@Override
public Object handleRequest(DynamodbEvent input, Context context) {
    context.getLogger().log("Input: " + input);

    for (DynamodbStreamRecord record : input.getRecords()){

        context.getLogger().log(record.getEventID());
        context.getLogger().log(record.getEventName());
        context.getLogger().log(record.getDynamodb().toString());
        Map<String,AttributeValue> currentRecord = record.getDynamodb().getNewImage();

        //how to get the pure json string of the new image
        //..............................................
     }
     return "Successfully processed " + input.getRecords().size() + " records.";
}

}

4

6 に答える 6

3

Himanshu Parmarの答えを要約すると:

Map<String, AttributeValue> newImage = record.getDynamodb().getNewImage();
List<Map<String, AttributeValue>> listOfMaps = new ArrayList<Map<String, AttributeValue>>();
listOfMaps.add(newImage);
List<Item> itemList = ItemUtils.toItemList(listOfMaps);
for (Item item : itemList) {
    String json = item.toJSON();
}
于 2017-06-01T13:06:54.830 に答える
2

それをきれいに行う方法を見つけました。aws-java-sdk-dynamodb-1.11.15.jar からの InternalUtils の使用

com.amazonaws.services.dynamodbv2.model.Record streamRecord = ((RecordAdapter) record).getInternalObject();
            // get order ready //
            OrderFinal order = Utils.mapO2Object(
                    InternalUtils.toSimpleMapValue(streamRecord.getDynamodb().getNewImage().get("document").getM()), 
                    OrderFinal.class );
于 2016-08-08T06:11:39.387 に答える