Почему я не могу получить некоторые значения ключа из объекта JSON? - PullRequest
0 голосов
/ 23 сентября 2019

Сценарий:

Я работаю над пользовательским приложением Slack в Node.js, где мне нужен список пользователей и отправляю "имена" пользователей в раскрывающемся списке.в диалоге Slack.

Я получаю список пользователей совершенно отлично в длинном объекте JSON, имеющем ключевое имя "members" типа array, затем использую foreach для перебора массива "members" и извлечения пользователейимена.

Проблема:

В массиве "members" есть объект для каждого пользователя, у которого есть свои "id", "name", "team_id", "" 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

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Это решено.

Проблема:

В массиве "members" было также несколько значений undefined для поля "real_name", которые создавали эту проблему.

Решение:

Просто добавили проверку 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});
        }
0 голосов
/ 23 сентября 2019

измените свой ответ на:

response.members.members.forEach

С: response.members.forEach

Хотя я предлагаю вам внимательно изучить документацию API ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...