Как извлечь конкретный объект из GetItem DynamoDB (JavaScript)?

#javascript #node.js #database #amazon-web-services #amazon-dynamodb

#javascript #node.js #База данных #amazon-веб-сервисы #amazon-dynamodb

Вопрос:

получение элемента из моей базы данных aws. ‘test2’ снизу корректно печатается как элемент в моей консоли. Но я хочу получить из него атрибут / переменную в элементе и вернуть его как var 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));
  

Комментарии:

1. Действительно полезный вопрос.

Ответ №1:

С помощью aws-sdk вы можете превратить элемент из ответа DynamoDB в более обычный объект, используя класс Converter, доступный в SDK:

Итак, если 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"
  

Ответ №2:

Вы должны быть просто в состоянии получить атрибут с обычным доступом к свойству в JavaScript, либо test.attributeName либо test['attributeName'] , где attributeName зависит от того, что вы хотите. В вашем примере это было бы problem .

Но вы не должны делать JSON.stringify слишком рано, так как это преобразует тип в string, и вы больше не сможете получить доступ к свойствам (если вы не разберете строку обратно в object).