これが私のコードです。asset_data
jsonをasset_data
列に挿入します。私はaws sdkを使用しています。 aws sdkがjsonをサポートするようになりました。 http://aws.Amazon.com/releasenotes/SDK/JavaScript/1691866671551861
var asset_data = {
"name": "name" + i,
"contentUrl": "http://www.hdwallpapersimages.com/nature-beauty-desktop-images/94892/",
"size": 300,
"headline": "headline",
"description": "assetUrl reference for the creator",
"encodingFormat": 'jpeg'
};
var params = {
TableName: 'xyz',
Item: { // a map of attribute name to AttributeValue
"asset_id": {S: "asset" + i},
"hit_id": {S: "0"},
"created_date": {"S": Date.now().toString()},
"status": {N: "0"},
"operation": {S: "image_tagging"},
"asset_data": {L: asset_data},
"source": {S: "DAM"},
"completed_date": {S: Date.now().toString()},
"response_data": {S: "taged value"}
// more attributes...
},
ReturnValues: 'NONE', // optional (NONE | ALL_OLD)
ReturnConsumedCapacity: 'NONE', // optional (NONE | TOTAL | INDEXES)
ReturnItemCollectionMetrics: 'NONE' // optional (NONE | SIZE)
};
db.putItem(params, function (err, data) {
if (err) console.log(err); // an error occurred
else console.log("inserted..."); // successful response
});
DynamoDBドキュメントクライアントSDKを使用できます。
http://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#put-property
ドキュメントクライアントは、属性値の概念を抽象化することで、Amazon DynamoDBのアイテムの操作を簡素化します。この抽象化は、入力パラメーターとして提供されるネイティブJavaScriptタイプに注釈を付けるとともに、注釈付き応答データをネイティブJavaScriptタイプに変換します。
あなたのケースのために、公式ドキュメントから抽出された以下の例でMapAttribute
として渡されているマップ属性値_(M)
_を具体的に見てください。 Document Client APIは、JavascriptタイプとDynamoDBタイプの間の適切なマーシャリング/アンマーシャリングを処理します(つまり、非ドキュメントベースのSDKを使用するときに必要なため、Attribute Values (S,N,L,...)
を指定する必要はありません)。
_var params = {
TableName: 'Table',
Item: {
HashKey: 'haskey',
NumAttribute: 1,
BoolAttribute: true,
ListAttribute: [1, 'two', false],
MapAttribute: { foo: 'bar'},
NullAttribute: null
}
};
var docClient = new AWS.DynamoDB.DocumentClient();
docClient.put(params, function(err, data) {
if (err) console.log(err);
else console.log(data);
});
_
DynamoDBは、JSONデータ、および挿入するデータ形式も保存できます。 DynamoDBに挿入するとき、およびDBデータを目的のJSONメソッドに取得するときにデータをフォーマットするために使用できる2つの方法があります。 https://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/Converter.html これらのメソッドは、input
およびoutput
です。
これを行うためにAWS lambdaコードの2つのサンプルスニペットを共有しました。これで問題が解決することを願っています。
次の方法で、JSONデータをDynamoDBがサポートする形式に変換してから挿入できます。
const AWS = require('aws-sdk');
//setting the region
AWS.config.update({region: 'ap-south-1'});
// Create the DynamoDB service object
const ddb = new AWS.DynamoDB.DocumentClient();
const getParams = (updatedTasks)=>{
const params = {
TableName: 'todo-application',
Key: {
"userID" : "[email protected]",
},
UpdateExpression: "set tasks = :updatedTasks",
ExpressionAttributeValues:{
":updatedTasks":updatedTasks
},
ReturnValues:"UPDATED_NEW"
};
return params;
}
const dbQuery =(newTask)=>{
let updatedTask = AWS.DynamoDB.Converter.input(newTask, true);
console.log('updated task formatted ',updatedTask);
let params = getParams(updatedTask);
return new Promise((resolve,reject) =>{
ddb.update(params, function(err, data) {
if (err) {
console.log("Error", err);
reject(err);
} else {
console.log("Success", data);
resolve(data.Item)
}
});
});
}
exports.updateTodoJobsOfAUser = async (event) => {
const insertObject = [
{
statement:'learn Dynamo DB', id: 23
},
{
statement:'Learn Serverless Architecture',id:24
}]
const data = await dbQuery(insertObject);
const response = {
statusCode: 200,
body: JSON.stringify(data)
};
return response;
};
次の方法で、DynamoDBデータをJSON形式に変換できます。
const dbQuery =()=>{
return new Promise((resolve,reject) =>{
ddb.get(params, function(err, data) {
if (err) {
console.log("Error", err);
reject(err);
} else {
console.log("Success", data);
resolve(data.Item)
}
});
});
}
exports.getAllTodoJobsOfAUser = async (event) => {
const data = await dbQuery();
const formattedData = AWS.DynamoDB.Converter.output(data, true);
const response = {
statusCode: 200,
body: JSON.stringify(formattedData)
};
return response;
};
わたしにはできる。お力になれて、嬉しいです !! :)