【问题标题】:How to read/access multi dimension object using JavaScript如何使用 JavaScript 读取/访问多维对象
【发布时间】:2020-03-14 16:49:07
【问题描述】:

我正在开发一个 Telegram 机器人,需要确定谁是组中的管理员

已经使用 JavaScript 开发了一个 Google Web App 并调用了以下方法 获取聊天管理员 使用此方法获取聊天中的管理员列表。成功时,返回一个包含所有聊天管理员信息的 ChatMember 对象数组

此方法返回以下内容: [20-03-14 17:14:23:403 AEDT]

{"ok":true,
 "result":
[{"user":{"id":810784352,"is_bot":false,"first_name":"Rafael","last_name":"Vasconcelos"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false},
 {"user":{"id":1021450393,"is_bot":false,"first_name":"Mauro","last_name":"Ramires"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false},
 {"user":{"id":998081853,"is_bot":false,"first_name":"Filipe","last_name":"Lima"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false},
 {"user":{"id":962548471,"is_bot":false,"first_name":"Trajano","last_name":"Roberto","username":"TrajanoRoberto","language_code":"en"},"status":"creator"},
 {"user":{"id":307271095,"is_bot":false,"first_name":"Leandro","last_name":"Silva","username":"Leandro_CRF"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false}
]
}

问题: 我正在努力寻找正确的 JavaScript 语法来阅读: id、名字和姓氏 对于方法返回的响应 获取ChatAdministrators

提前感谢您的帮助。

特拉哈诺·罗伯托

【问题讨论】:

  • 你想做什么?

标签: javascript google-apps-script telegram-bot


【解决方案1】:

假设上面的输出对象在变量obj中,你可以使用下面的sn-p来记录每个用户的详细信息:

 var results = obj.result;  
  if (results.length > 0) {
    for (var r in results) {
      var user = results[r].user;
      Logger.log([user.id, user.first_name, user.last_name])
    }
  }

为了理解这一点,如果你解析对象(在tool like this 中),所有用户都在result 中的一个数组中。并且每个用户的详细信息都在user

【讨论】:

    【解决方案2】:

    您可以在map() 函数的帮助下找到idfirst_namelast_name,如下所示。

    var myArray = {"ok":true,"result":[{"user":{"id":810784352,"is_bot":false,"first_name":"Rafael","last_name":"Vasconcelos"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false},{"user":{"id":1021450393,"is_bot":false,"first_name":"Mauro","last_name":"Ramires"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false},{"user":{"id":998081853,"is_bot":false,"first_name":"Filipe","last_name":"Lima"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false},{"user":{"id":962548471,"is_bot":false,"first_name":"Trajano","last_name":"Roberto","username":"TrajanoRoberto","language_code":"en"},"status":"creator"},{"user":{"id":307271095,"is_bot":false,"first_name":"Leandro","last_name":"Silva","username":"Leandro_CRF"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false}]}
    
    JSON.parse(JSON.stringify([myArray])).map(function(v,i) {
      v.result.map(function(v2, i2){
        console.log('ID:'+v2.user.id+' ==> First Name:'+v2.user.first_name+' ==> Last Name:'+v2.user.last_name)
      })
    })

    【讨论】:

      【解决方案3】:

      您似乎从请求中获得了 JSON 响应,并且它是一个对象。因此,要获得idfirst_namelast_name,您必须检查response

      假设您的请求响应是-

      let response = {"ok":true, "result": [{"user":{"id":810784352,"is_bot":false,"first_name":"Rafael","last_name":"Vasconcelos"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false}, {"user":{"id":1021450393,"is_bot":false,"first_name":"Mauro","last_name":"Ramires"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false}, {"user":{"id":998081853,"is_bot":false,"first_name":"Filipe","last_name":"Lima"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false}, {"user":{"id":962548471,"is_bot":false,"first_name":"Trajano","last_name":"Roberto","username":"TrajanoRoberto","language_code":"en"},"status":"creator"}, {"user":{"id":307271095,"is_bot":false,"first_name":"Leandro","last_name":"Silva","username":"Leandro_CRF"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false}]};
      

      我不知道,但如果它是一个 JSON 字符串,然后解析它,这样程序就不会失败。

      if (typeof response === 'string') {
          response = JSON.parse(response);
      }
      

      这里我检查响应是否为字符串,然后将字符串解析为 JSON。

      最后,我必须遍历响应,因为所需的信息存储在 result 数组的 user 对象中。

      response.result.map(result => {
          console.log(result.user.id, result.user.first_name, result.user.last_name);
      });
      

      我只是控制价值观。你可以为所欲为。

      let response = {"ok":true, "result": [{"user":{"id":810784352,"is_bot":false,"first_name":"Rafael","last_name":"Vasconcelos"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false}, {"user":{"id":1021450393,"is_bot":false,"first_name":"Mauro","last_name":"Ramires"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false}, {"user":{"id":998081853,"is_bot":false,"first_name":"Filipe","last_name":"Lima"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false}, {"user":{"id":962548471,"is_bot":false,"first_name":"Trajano","last_name":"Roberto","username":"TrajanoRoberto","language_code":"en"},"status":"creator"}, {"user":{"id":307271095,"is_bot":false,"first_name":"Leandro","last_name":"Silva","username":"Leandro_CRF"},"status":"administrator","can_be_edited":false,"can_change_info":true,"can_delete_messages":true,"can_invite_users":true,"can_restrict_members":true,"can_pin_messages":true,"can_promote_members":false}]};
      
      if (typeof response === 'string') {
      	response = JSON.parse(response);
      }
      
      response.result.map(result => {
      	console.log(`id: ${result.user.id}`, `first_name: ${result.user.first_name}`, `last_name: ${result.user.last_name}`);
      });

      【讨论】:

      • 嘿 Sajeeb 很遗憾,这个说法是不正确的,因为 if (typeof response === 'string') { response = JSON.parse(response); } var aChatMember = getChatAdministrators(chat_id);无论如何返回对象而不是字符串,感谢您的帮助
      • 其实我不知道它返回的是字符串还是对象。这是一个安全检查,如果响应是一个字符串然后解析它。如果您确定它是一个对象,请跳过此解析。
      • 感谢您的清晰回复,最好确定要发布什么,否则可能会混淆 setWebhook 使用此方法指定 url 并通过传出 webhook 接收传入更新。每当机器人有更新时,我们都会向指定的 url 发送一个 HTTPS POST 请求,其中包含一个 JSON 序列化的更新。如果请求不成功,我们将在合理的尝试次数后放弃。成功时返回 True。更新此对象表示传入的更新。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2019-04-11
      • 2017-05-27
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多