【问题标题】:How to retrieve specific object from a getItem dynamoDB (JavaScript)?如何从 getItem dynamoDB (JavaScript) 中检索特定对象?
【发布时间】:2019-04-01 22:27:41
【问题描述】:

从我的 aws 数据库中获取项目。下面的“test2”作为我的控制台中的一个项目正确打印。但我想在项目中从中获取一个属性/变量,并将其作为 var 测试返回。我该怎么做?例如,如果我想获取属性名称“问题”并返回它?

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));

【问题讨论】:

  • 非常有用的问题。

标签: javascript node.js database amazon-web-services amazon-dynamodb


【解决方案1】:

借助 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"

【讨论】:

  • 非常有用的答案。 #upvote
【解决方案2】:

您应该能够通过正常的property access in JavaScripttest.attributeNametest['attributeName'] 获得属性,其中属性名称取决于您想要的。在您的示例中,它将是 problem

但是你不应该太早使用JSON.stringify,因为这会将类型转换为字符串并且你不能再访问属性(除非你将字符串解析回对象)。

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 2022-11-28
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多