首页 > 解决方案 > 使用 S3 Select 数据的 Alexa Skill

问题描述

我的 S3 存储桶中有一个 JSON 对象,我想使用 S3 select 查询这个 JSON 数据,检索所需的字段,然后将结果连接成一个字符串并将其返回给 Alexa 将说出这个字符串的其他函数。

我在 S3 存储桶中的 JSON 数据如下所示。

{
    person = [
    {
            "Id": "valid",
            "Name": "Anshu",
            "Address": "Templestowe",
            "Car": "Jeep"
    },
    {
            "Id": "valid",
            "Name": "Ben Mostafa",
            "Address": "Las Vegas",
            "Car": "Mustang"
    },
    {
                    "Id": "not valid",
                    "Name": "Rohan Wood",
                    "Address": "Wooddon",
                    "Car": "VW"
    },
    {
                    "Id": "not valid",
                    "Name": "John Cena",
                    "Address": "Wooddon",
                    "Car": "VW"
    },
    {
                    "Id": "valid",
                    "Name": "Ray Hope",
                    "Address": "Wooddon",
                    "Car": "VW"
    }
    ]
}

现在,我希望能够使用 S3 select 从我的 lambda 函数中查询这些数据。

我将 NODE JS 用于我的 Alexa 技能。

我想要所有 ID 为“有效”的人的姓名。

运行 SQL 查询时:

select s.name from s3object[*].person[*] s where s.name is not missing AND s.id = 'valid'

我以以下形式获得该数据:

[
    {
        "name": "Anshu"
    },
    {
        "name": "Ben Mostafa"
    },
    {
        "name": "Ray Hope"
    }
]

我想知道的是如何接受上述结果,然后使用我的 lambda 函数制作如下字符串?

str = "Anshu .Ben Mostafa. Ray Hope"

所以,对于上面的查询,我希望我的结果是一个字符串变量str = "Anshu .Ben Mostafa. Ray Hope"

我在此处阅读了有关使用承诺从查询中取回结果的信息,但我不确定如何进一步进行。

关联

此外,我阅读了 AWS 文档,但无法处理结果。你能帮我解决这个问题吗?

标签: javascriptamazon-s3dom-eventses6-promisealexa

解决方案


我假设您可以将结果存储在变量中:

let result = [
    {
        "name": "Anshu"
    },
    {
        "name": "Ben Mostafa"
    },
    {
        "name": "Ray Hope"
    }
]

const str = result.map(r => r.name).join(". ").concat("."); // "Anshu. Ben Mostafa. Ray Hope."

推荐阅读