首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从JSON中获取特定项

如何从JSON中获取特定项
EN

Stack Overflow用户
提问于 2020-01-25 14:18:14
回答 1查看 181关注 0票数 1

我是node.js和DialogFlow的新手。我使用DynamoDB存储数据,并在谷歌上创建技能。我正在试图编写一个代码来检索该表上的特定项。

我让它显示ID等于= 1的所有项,但是我如何使它能够得到属性'name‘呢?

我的想法是,用户提供一个id,然后代码将检索id原来为1的名称,并将其存储为变量,并使用agent.add('hello $(name)');将其作为语音显示给用户。

代码语言:javascript
复制
  function readdata(agent){
    let dbread = new aws.DynamoDB.DocumentClient();

    const id = agent.parameters.id;

    let read = function(){
        var parameters = {
            TableName:"Dynamodb",
            Key:{
                "id":id
            }
        };
        dbread.get(parameters, function(err,data){
            if(err){
                console.log("error",JSON.stringify(data,null,2));
            }else{
                console.log("success",JSON.stringify(data,null,2));
            }
        });
      agent.add(`hello ${name}`);
    };
    read();
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-26 13:36:52

一旦您从get()调用中获得数据,data对象将属性。此属性的值将是另一个包含此记录的属性/值对的对象,如果找不到该记录,则为空。

显示JSON.stringify(data)的调试应该显示这一点。

假设你知道所有的田地都在那里,你可以做如下的事情

代码语言:javascript
复制
const name = data.Item.name;

使用当前JavaScript的一种更健壮的方法是确保分配了所有内容,否则在任何时候都返回undefined。所以像这样的东西会起作用

代码语言:javascript
复制
const name = data && data.Item && data.Item.name;

然而,-您在使用对话框流时会遇到问题

您没有显示您使用的是哪个对话框流库,但它们中的大多数都要求您返回一个承诺,指示它需要等待异步调用(例如对DynamoDB的调用)才能完成。您使用的是带有回调函数的get(),而不是承诺函数。因此,您需要执行以下操作之一:

  1. 用承诺来包装电话
  2. 因为get()返回一个AWS.Request,所以您可以使用这个方法的promise()方法得到一个承诺,您可以返回它,其中包含生成响应的then部分--类似于您现在进行回调的方式。

在此方案下,您的调用可能如下所示(未经测试):

代码语言:javascript
复制
    return dbread.get(parameters).promise()
      .then( data => {
        console.log("success",JSON.stringify(data,null,2));
        const name = data && data.Item && data.Item.name;
        if( name ){
          agent.add( `Hello ${name}` );
        } else {
          agent.add( "I don't know who you are." );
        }
      })
      .catch( err => {
        console.log("error",JSON.stringify(data,null,2));
        agent.add( "There was an error" );
      });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59910068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档