Reputation: 10813
Given some DynamoDB JSON via a DynamoDB NewImage
stream event, how do I unmarshall it to regular JSON?
{"updated_at":{"N":"146548182"},"uuid":{"S":"foo"},"status":{"S":"new"}}
Normally I would use AWS.DynamoDB.DocumentClient, however I can't seem to find a generic Marshall/Unmarshall function.
Sidenote: Do I lose anything unmarshalling DynamoDB JSON to JSON and back again?
Upvotes: 46
Views: 53089
Reputation: 58030
AWS SDK for JavaScript version 3 (V3) provides nice methods for marshalling and unmarshalling DynamoDB records reliably.
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);
Output:
// 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' }
}
Upvotes: 56
Reputation: 4061
You can use the AWS.DynamoDB.Converter.unmarshall
function. Calling the following will return { updated_at: 146548182, uuid: 'foo', status: 'new' }
:
AWS.DynamoDB.Converter.unmarshall({
"updated_at":{"N":"146548182"},
"uuid":{"S":"foo"},
"status":{"S":"new"}
})
Everything that can be modeled in DynamoDB's marshalled JSON format can be safely translated to and from JS objects.
Upvotes: 64