【问题标题】:Why I am not able to get some key-values from JSON object?为什么我无法从 JSON 对象中获取一些键值?
【发布时间】:2019-09-23 10:56:56
【问题描述】:

场景:

我正在使用 Node.js 中的 Slack 自定义应用程序,我需要一个用户列表并在 Slack 对话框中将用户的“名称”发送到一个下拉列表。

我在一个长 JSON 对象中获得了一个用户列表,该对象非常好,该对象具有数组类型的键名“成员”,然后使用 foreach 迭代“成员”数组并提取用户名。

问题:

在 "members" 数组中,每个用户都有一个对象,每个用户都有他们的 "id"、"name"、"team_id"、""real_name" 等等 当我提取“名称”并发送它作为响应时,它工作正常并在对话框中填充列表但是当我发送“real_name”时它停止工作并且在对话框中,我看不到任何条目。

请看下面的代码:

        slack.users.list({
                token: userToken
            })
            .then((response) => {
                console.log("users", response.members);
                if(response.members.length !== 0){
                    console.log("Inside users if");
                    response.members.forEach((userObject) => {
                        //at this line I am getting userObject.real_name correct
                        var userName = {
                            "label" : userObject.real_name,
                            "value" : userObject.real_name
                        }
                        // at this line I checked, "userName" is creating fine
                        assignToList.push(userName);
                        //at this line I checked, "assignToList" is creating fine
                    });
                    res.send({options: assignToList});
                }

            })
            .catch(error => console.error("Error while getting users list", error));

用户列表的JSON:

users { ok: true, members: [ { id: 'USLACKBOT', team_id: 'T894JCLMV', name: 'slackbot', deleted: false, color: '757575', real_name: 'Slackbot', tz: null, tz_label: 'Pacific Daylight Time', tz_offset: -25200, profile: [Object], is_admin: false, is_owner: false, is_primary_owner: false, is_restricted: false, is_ultra_restricted: false, is_bot: false, is_app_user: false, updated: 0 }, { id: 'U87GKAELR', team_id: 'T894JCLMV', name: 'hamza.tariq.it', deleted: false, color: '9f69e7', real_name: 'Hamza', tz: 'Australia/Canberra', tz_label: 'Australian Eastern Standard Time', tz_offset: 36000, profile: [Object], is_admin: true, is_owner: true, is_primary_owner: false, is_restricted: false, is_ultra_restricted: false, is_bot: false, is_app_user: false, updated: 1569099496, has_2fa: false }, { id: 'U8855S4CS', team_id: 'T894JCLMV', name: 'ybot', deleted: false, color: 'e7392d', real_name: 'Hybris Commerce Bot', tz: 'America/Los_Angeles', tz_label: 'Pacific Daylight Time', tz_offset: -25200, profile: [Object], is_admin: false, is_owner: false, is_primary_owner: false, is_restricted: false, is_ultra_restricted: false, is_bot: true, is_app_user: false, updated: 1530835779 }, { id: 'U8976PQCF', team_id: 'T894JCLMV', name: 'hybrisbot', deleted: false, color: '4bbe2e', real_name: 'yIntegration', tz: 'America/Los_Angeles', tz_label: 'Pacific Daylight Time', tz_offset: -25200, profile: [Object], is_admin: false, is_owner: false, is_primary_owner: false, is_restricted: false, is_ultra_restricted: false, is_bot: true, is_app_user: false, updated: 1569099496 }, { id: 'UCQ1WRY4S', team_id: 'T894JCLMV', name: 'mahwishhamza97', deleted: false, color: '3c989f', real_name: 'Brian Lara', tz: 'Australia/Canberra', tz_label: 'Australian Eastern Standard Time', tz_offset: 36000, profile: [Object], is_admin: false, is_owner: false, is_primary_owner: false, is_restricted: false, is_ultra_restricted: false, is_bot: false, is_app_user: false, updated: 1569099496, has_2fa: false }, { id: 'UCR58NWMD', team_id: 'T894JCLMV', name: 'prioritybot', deleted: false, color: '674b1b', real_name: 'prioritybot', tz: 'America/Los_Angeles', tz_label: 'Pacific Daylight Time', tz_offset: -25200, profile: [Object], is_admin: false, is_owner: false, is_primary_owner: false, is_restricted: false, is_ultra_restricted: false, is_bot: true, is_app_user: false, updated: 1548659099 }, { id: 'UCR5YEXUZ', team_id: 'T894JCLMV', name: 'siddarth.pugazhendi', deleted: false, color: 'e0a729', real_name: 'Siddarth Pugazhendi', tz: 'Australia/Canberra', tz_label: 'Australian Eastern Standard Time', tz_offset: 36000, profile: [Object], is_admin: false, is_owner: false, is_primary_owner: false, is_restricted: false, is_ultra_restricted: false, is_bot: false, is_app_user: false, updated: 1569099496, has_2fa: false }, { id: 'UCRGZU0SG', team_id: 'T894JCLMV', name: 'pasquale.campitiello', deleted: false, color: '2b6836', real_name: 'Pasquale', tz: 'Australia/Canberra', tz_label: 'Australian Eastern Standard Time', tz_offset: 36000, profile: [Object], is_admin: false, is_owner: false, is_primary_owner: false, is_restricted: false, is_ultra_restricted: false, is_bot: false, is_app_user: false, updated: 1569099496, has_2fa: false }, { id: 'UCRNZKTSN', team_id: 'T894JCLMV', name: 'usman.kamal', deleted: false, color: '5b89d5', real_name: 'Usman Kamal', tz: 'Asia/Karachi', tz_label: 'Pakistan Standard Time', tz_offset: 18000, profile: [Object], is_admin: true, is_owner: false, is_primary_owner: false, is_restricted: false, is_ultra_restricted: false, is_bot: false, is_app_user: false, updated: 1569099496, has_2fa: false }, { id: 'UCRTWG79B', team_id: 'T894JCLMV', name: 'felipe.rodrigues', deleted: false, color: '99a949', real_name: 'Felipe', tz: 'Australia/Canberra', tz_label: 'Australian Eastern Stan

【问题讨论】:

  • 您收到什么错误信息?哪里出错了?
  • 没有出现错误信息。我将它部署在谷歌云功能上,但它在日志中没有错误

标签: node.js slack slack-api


【解决方案1】:

解决了。

问题:

在“members”数组中,“real_name”字段的一些 undefined 值也造成了此问题。

解决方案:

刚刚添加了if 检查以验证“real_name”是否有效。它就像一个魅力。

if(response.members.length !== 0){
            response.members.forEach((userObject) => {
                if(userObject.real_name){ //added this check
                var userName = {
                    "label" : userObject.real_name,
                    "value" : userObject.id
                }
                assignToList.push(userName);
                }
            });
            res.send({options: assignToList});
        }

【讨论】:

    【解决方案2】:

    将您的回复更改为:

    response.members.members.forEach

    发件人:response.members.forEach

    不过,我建议您仔细查看 API 文档..

    【讨论】:

    • 为什么会这样?一个对象非常简单,“members”中没有“members”字段。
    • 当您在控制台记录 response.members 时,它是一个带有“ok”的对象:字符串和“members”:Member[]
    • console.log("users", response.members);用户 { ok: true, members: [ { id: 'USLACKBOT ....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多