解组DynamoDB JSON

解组DynamoDB JSON,json,amazon-web-services,aws-sdk-js,Json,Amazon Web Services,Aws Sdk Js,通过dynamodbnewimage流事件提供一些dynamodbjson,如何将其解组为常规JSON 通常我会使用,但是我似乎找不到通用的Marshall/Unmarshall函数 旁注:将DynamoDB JSON解组为JSON再解组为JSON时,我是否丢失了任何内容?您可以使用AWS.DynamoDB.Converter.unmarshall函数。调用以下命令将返回{updated_地址:146548182,uuid:'foo',status:'new'}: AWS.DynamoDB.Co

通过dynamodbnewimage流事件提供一些dynamodbjson,如何将其解组为常规JSON

通常我会使用,但是我似乎找不到通用的Marshall/Unmarshall函数


旁注:将DynamoDB JSON解组为JSON再解组为JSON时,我是否丢失了任何内容?

您可以使用
AWS.DynamoDB.Converter.unmarshall
函数。调用以下命令将返回
{updated_地址:146548182,uuid:'foo',status:'new'}

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

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

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

将字段注释为@DynamoAttribute

...

@DynamoDBAttribute
private MyObjectClass myObject;
然后,您用@DynamoDBDocument注释“MyObjectClass”

@DynamoDBDocument
public class MyObjectClass {
....
}
DynamoDB将把“MyObjectClass myObject”转换和反转换为您发布的JSON形状。

为和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' }
}

啊。。多么糟糕的API啊,它要求M thing
aws.DynamoDB.Converter.output({'M':record.DynamoDB.NewImage})
aws.DynamoDB.Converter.output
是DocumentClient将对象转换为JSON样式对象的一部分。我假设
M
是您在stream事件中获得的数据的一部分。我打开了一个PR来改进API,添加了一个
marshall
函数,该函数不需要
M
键,它包含在SDK的2.71.0版中。从2020年4月开始使用AWS SDK Javascript API对我来说效果很好。谢谢!如果其他人来寻找这个问题的python/boto版本,那么这里有一个相关的问题:据我所知,这些注释是针对Java的。OP讨论的是JavaScript。
// 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' }
}