2016-12-01 29 views
0

最终目标:我想从我从Slack提取的JSON字符串中获取'userid','username'和'email'。当我尝试将它转换为列表时,它只会给我前三个键,它不会拉取嵌套的数据。将JSON字符串转换为列表以便列举

这里是我的代码:

from slackclient._client import SlackClient 
    import json 

    def main(): 
     token = "XXXXX" 
     sc = SlackClient(token) 
     users = get_users(sc) 
     print(users) 
     print(list(users)) 

    def get_users(sc): 
    print("Get Users") 
    print(80 * "=") 
    #call the users.list api call and get list of users 
    users = (sc.api_call("users.list")) 
    users = json.dumps(users) 
    users = json.loads(str(users)) 
    return users 

    main() 

我的问题是“打印(用户)”打印我出一个完整的JSON字符串和“打印(列表(用户))”只打印第一非嵌套键。这是我的输出结果的一个例子。

“打印(列表(用户))”给我下面的:

['members', 'cache_ts', 'ok'] 

“打印(用户)”给我的下面,但我不能撤出它的具体的事情作为一个字符串。

{'members': [{'real_name': 'XXXXXX', 'is_ultra_restricted': False, 'name': 'XXXXX', 'is_primary_owner': False, 'id': 'XXXXXX', 'color': '4bbe2e', 'status': None, 'profile': {'image_32': 'https://secure.gravatar.com/avatar/140a3a97c34e956bb6692fb0f1bd325e.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0006-32.png', 'real_name': 'XXXXXX', 'first_name': 'XXXXXX', 'avatar_hash': 'g140a3a97c34', 'email': '[email protected]', 'image_192': 'https://secure.gravatar.com/avatar/140a3a97c34e956bb6692fb0f1bd325e.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0006-192.png', 'image_24': 'https://secure.gravatar.com/avatar/140a3a97c34e956bb6692fb0f1bd325e.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0006-24.png', 'real_name_normalized': 'XXXXXX', 'image_512': 'https://secure.gravatar.com/avatar/140a3a97c34e956bb6692fb0f1bd325e.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0006-512.png', 'last_name': 'XXXXXX', 'image_48': 'https://secure.gravatar.com/avatar/140a3a97c34e956bb6692fb0f1bd325e.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0006-48.png', 'image_72': 'https://secure.gravatar.com/avatar/140a3a97c34e956bb6692fb0f1bd325e.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0006-72.png'}, 'deleted': False, 'tz': 'America/Los_Angeles', 'tz_offset': -28800, 'is_restricted': False, 'is_admin': False, 'team_id': 'T3854BB3K', 'has_2fa': False, 'is_bot': False, 'tz_label': 'Pacific Standard Time', 'is_owner': False}, {'real_name': 'XXXXXXX, 'is_ultra_restricted': False, 'name': 'XXXXXXX', 'is_primary_owner': True, 'id': 'XXXXXXX', 'color': '9f69e7', 'status': None, 'profile': {'image_32': 'https://secure.gravatar.com/avatar/98e886a882b9eb8476b39519a0007b50.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0001-32.png', 'real_name': 'XXXXXX', 'first_name': 'XXXXX', 'avatar_hash': 'g98e886a882b', 'email': '[email protected]', 'image_192': 'https://secure.gravatar.com/avatar/98e886a882b9eb8476b39519a0007b50.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0001-192.png', 'image_24': 'https://secure.gravatar.com/avatar/98e886a882b9eb8476b39519a0007b50.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2F66f9%2Fimg%2Favatars%2Fava_0001-24.png', 'real_name_normalized': 'XXXXXXX', 'image_512': 'https://secure.gravatar.com/avatar/98e886a882b9eb8476b39519a0007b50.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2F7fa9%2Fimg%2Favatars%2Fava_0001-512.png', 'last_name': 'XXXXXX', 'image_48': 'https://secure.gravatar.com/avatar/98e886a882b9eb8476b39519a0007b50.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2F0180%2Fimg%2Favatars%2Fava_0001-48.png', 'image_72': 'https://secure.gravatar.com/avatar/98e886a882b9eb8476b39519a0007b50.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2F3654%2Fimg%2Favatars%2Fava_0001-72.png'}, 'deleted': False, 'tz': 'America/Chicago', 'tz_offset': -21600, 'is_restricted': False, 'is_admin': True, 'team_id': 'T3854BB3K', 'has_2fa': False, 'is_bot': False, 'tz_label': 'Central Standard Time', 'is_owner': True}, {'real_name': 'Talla', 'is_ultra_restricted': False, 'name': 'talla', 'is_primary_owner': False, 'id': 'XXXXXX', 'color': 'e7392d', 'status': None, 'profile': {'api_app_id': 'A0P3RDP0R', 'image_32': 'https://avatars.slack-edge.com/2016-11-30/111583483766_0864de31dc83b2d4ad5b_32.png', 'image_original': 'https://avatars.slack-edge.com/2016-11-30/111583483766_0864de31dc83b2d4ad5b_original.png', 'real_name': 'Talla', 'always_active': False, 'first_name': 'Talla', 'bot_id': 'B38SQ12EN', 'avatar_hash': '0864de31dc83', 'image_1024': 'https://avatars.slack-edge.com/2016-11-30/111583483766_0864de31dc83b2d4ad5b_512.png', 'image_192': 'https://avatars.slack-edge.com/2016-11-30/111583483766_0864de31dc83b2d4ad5b_192.png', 'image_24': 'https://avatars.slack-edge.com/2016-11-30/111583483766_0864de31dc83b2d4ad5b_24.png', 'real_name_normalized': 'Talla', 'image_512': 'https://avatars.slack-edge.com/2016-11-30/111583483766_0864de31dc83b2d4ad5b_512.png', 'image_48': 'https://avatars.slack-edge.com/2016-11-30/111583483766_0864de31dc83b2d4ad5b_48.png', 'image_72': 'https://avatars.slack-edge.com/2016-11-30/111583483766_0864de31dc83b2d4ad5b_72.png'}, 'deleted': False, 'tz': None, 'tz_offset': -28800, 'is_restricted': False, 'is_admin': False, 'team_id': 'T3854BB3K', 'is_bot': True, 'tz_label': 'Pacific Standard Time', 'is_owner': False}, {'real_name': 'slackbot', 'is_ultra_restricted': False, 'name': 'slackbot', 'is_primary_owner': False, 'id': 'USLACKBOT', 'color': '757575', 'status': None, 'profile': {'image_32': 'https://a.slack-edge.com/2fac/plugins/slackbot/assets/service_32.png', 'real_name': 'slackbot', 'first_name': 'slackbot', 'fields': None, 'last_name': '', 'image_192': 'https://a.slack-edge.com/66f9/img/slackbot_192.png', 'image_24': 'https://a.slack-edge.com/0180/img/slackbot_24.png', 'real_name_normalized': 'slackbot', 'image_512': 'https://a.slack-edge.com/1801/img/slackbot_512.png', 'avatar_hash': 'sv1444671949', 'image_48': 'https://a.slack-edge.com/2fac/plugins/slackbot/assets/service_48.png', 'image_72': 'https://a.slack-edge.com/0180/img/slackbot_72.png'}, 'deleted': False, 'tz': None, 'tz_offset': -28800, 'is_restricted': False, 'is_admin': False, 'team_id': 'T3854BB3K', 'is_bot': False, 'tz_label': 'Pacific Standard Time', 'is_owner': False}], 'ok': True, 'cache_ts': 1480600947} 
+1

输出不是json,它是带有字典列表的Python复杂字典的表示形式。 – CAB

回答

1

json.loads()返回一个字典,并且默认迭代字典实际遍历键。
尝试迭代users.items()以获得(key,value)对。

+0

我试过枚举和迭代。我仍然只获得顶级水平。 enum_users = list(enumerate(users.items(),)) –

+0

尝试了iter表达式,它将它变成了我的列表。我应该索引它吗? –