如何从 getItem DynamoDB 中检索特定对象(JavaScript)?

3
从我的AWS数据库中获取一个项目。下面的“test2”在控制台中正确打印为一个项目。但是我想从项目中获取一个属性/变量,并将其作为变量test返回。我该如何做?例如,如果我想获取名称为“problem”的属性并返回它呢?
var test;

ddb.getItem(param, function(err, data1) {
  if (err) {
    console.log("Error", err);
  } else {
      var test2 = JSON.stringify(data1);

    console.log("Get Success",  test2);
    test = JSON.stringify(data1, undefined, 1);

  }
});
speechOutput = `Ok ${test}. Thanks, I have reported this. Do you have anything else to report?`;

    callback(sessionAttributes,
         buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession));

非常有用的问题。 - Deva
2个回答

8

使用aws-sdk,您可以使用SDK中提供的Converter类将DynamoDB响应中的项目转换为外观更正常的对象:

因此,如果data1看起来像这样:

const data1 = {
  Item: {
   "AlbumTitle": {
     S: "Songs About Life"
   }, 
   "Artist": {
     S: "Acme Band"
   }, 
   "SongTitle": {
     S: "Happy Day"
    }
  }
}

data1.Item传递给unmarshall函数,如下所示:
const flat = AWS.DynamoDB.Converter.unmarshall(data1.Item);

现在flat会像这样:

{
  "AlbumTitle": "Songs About Life",
  "Artist": "Acme Band",
  "SongTitle": "Happy Day"
}

因此,您可以像平常一样访问属性:

console.log(flat.Artist) #=> "Acme Band"

0
你只需使用JavaScript中的普通属性访问即可获取属性,可以是test.attributeNametest ['attributeName'],其中attributeName取决于你想要什么。在你的例子中,应该是problem
但你不应该过早地进行JSON.stringify,因为那会将类型转换为字符串,之后就无法再访问属性了(除非你将其解析回对象)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接