将Dynamo DB流数据解组为Json格式

问题描述:

我必须将DDB流消息转换为普通的json类型。
为此,我正在使用

I have to translate the DDB stream message into normal json type. For this I am using

 unmarshalleddata = aws.DynamoDB.Converter.unmarshall(result.NewImage);

其中result.NewImage是

where result.NewImage is

{ carrier: { S: 'SPRING' },
 partnerTransactionId: { S: 'a87ce47a46d7416586e0ece39f706d48' },
 shipmentId: { S: 'SPRING2200419561404932' },
 compressedShipmentPayload: 
  { B: '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' },
 correlationId: { S: 'ba40a7a721444c57aeafd7d739ffe7f6' },
 partnerId: { S: '697855049' },
 trackingNumber: { S: '3SDMZR6920882' },
 ttl: { N: '1538125523' },
 createDate: { S: '2018-09-21 09:05:23' } }

{ carrier: 'SPRING',
  partnerTransactionId: 'a87ce47a46d7416586e0ece39c706d48',
  shipmentId: 'SPRING2200419561444932',
  compressedShipmentPayload: <Buffer 48 34 73 49 41 41 41 41 41 41 41 41 41 4f 31 62 2b 5a 50 69 52 72 4c 2b 56 7a 72 34 74 62 33 54 6b 72 67 61 52 37 79 49 46 57 64 44 49 33 46 4a 48 48 ... >,
  correlationId: 'ba40a7a711444c57aeafd7d739ffe7f6',
  partnerId: '697855049',
  trackingNumber: '3SDMZR6920881',
  ttl: 1538125523,
  createDate: '2018-09-21 09:05:23' }

一切都是正确的,除了compressedShipmentPayload是B dynamo属性类型的类型(实际上仅是通过dyamodb压缩实用程序压缩的GZIP文本)。解组后,其更改为Unit8ArrayBuffer。
如何处理不将其转换为Unit8ArrayBuffer而是仅保留为压缩文本类型的问题。

Everything is correct except the compressedShipmentPayload which is of type B dynamo attribute type ( actually a compressed GZIP text via dyamodb compression utility only) . After unmarshalling, its getting changed to Unit8ArrayBuffer. How can I handle this not to be converted to Unit8ArrayBuffer but remain as the compressed text type only.

我也尝试过:

console.log(aws.DynamoDB.Converter.output({ 'M': result.NewImage }));

 var docClient =  new aws.DynamoDB.DocumentClient()
    //Create a Translator object, which comes from the DocumentClient
    var dynamodbTranslator = docClient.getTranslator();

    var ItemShape = docClient.service.api.operations.getItem.output.members.Item;
    result.NewImage  = dynamodbTranslator.translateOutput(result.NewImage, ItemShape);
    console.log(result.NewImage)

但是所有这些都会导致相同的结果。

But all leading to same results.

我可以通过

var s = JSON.stringify(data.NewImage);
   s =  s.replace('"B":', '"S":');
   parserd_json = JSON.parse(s);
   unmarshalleddata = aws.DynamoDB.Converter.unmarshall(parserd_json);

如果有任何更好的解决方案。请提出建议。

If any one has any better solution. Please suggest.