解组DynamoDB JSON

时间:2017-06-14 04:29:44

标签: json amazon-web-services aws-sdk-js

通过DynamoDB NewImage流事件给出一些 DynamoDB JSON ,如何将其解组为常规JSON

{"updated_at":{"N":"146548182"},"uuid":{"S":"foo"},"status":{"S":"new"}}

通常我会使用AWS.DynamoDB.DocumentClient,但我似乎找不到通用的Marshall / Unmarshall函数。

旁注:我是否会丢失任何将 DynamoDB JSON 解组为JSON并再次返回的内容?

3 个答案:

答案 0 :(得分:14)

您可以使用AWS.DynamoDB.Converter.unmarshall功能。调用以下内容将返回{ updated_at: 146548182, uuid: 'foo', status: 'new' }

AWS.DynamoDB.Converter.unmarshall({
    "updated_at":{"N":"146548182"},
    "uuid":{"S":"foo"},
    "status":{"S":"new"}
})

可以使用DynamoDB编组的JSON格式建模的所有内容都可以安全地转换为JS对象和从JS对象转换。

答案 1 :(得分:5)

AWS SDK for JavaScript version 3 (V3)marshallingunmarshalling DynamoDB 记录可靠地提供了很好的方法。

const { marshall, unmarshall } = require("@aws-sdk/util-dynamodb");

const dynamo_json = { "updated_at": { "N": "146548182" }, "uuid": { "S": "foo" }, "status": { "S": "new" } };

const to_regular_json = unmarshall(dynamo_json);

const back_to_dynamo_json = marshall(to_regular_json);

输出:

// dynamo_json    
{ 
      updated_at: { N: '146548182' },
      uuid: { S: 'foo' },
      status: { S: 'new' }
}

// to_regular_json
{ updated_at: 146548182, uuid: 'foo', status: 'new' }

// back_to_dynamo_json
{
   updated_at: { N: '146548182' },
   uuid: { S: 'foo' },
   status: { S: 'new' }
}

答案 2 :(得分:0)

另一种更易于实现的方法,让DynamoDB在幕后处理转换。

将字段注释为@DynamoAttribute

...

@DynamoDBAttribute
private MyObjectClass myObject;

然后,您用@DynamoDBDocument注释“ MyObjectClass”

@DynamoDBDocument
public class MyObjectClass {
....
}

然后DynamoDB会将“ MyObjectClass myObject”转换和取消转换为您发布的JSON形状。