#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).