首页 > 解决方案 > 如何修剪 JSON 数组以获取特定值

问题描述

所以我正在使用 Echo Arena API,它以 JSON 格式为我提供了以下一些内容。我正在尝试获取当时比赛中所有用户的姓名,如此处所示,有球员姓名:rnedds 和更远的 DarkCobra866 我怎样才能只得到名字而不得到其他信息?使用 Python 3。

{
   "teams":[
      {
         "players":[
            {
               "name":"rnedds",
               "rhand":[
                  -3.3230002,
                  -1.2370001,
                  -18.701
               ],
               "playerid":0,
               "position":[
                  -2.7520001,
                  -0.96800005,
                  -18.622002
               ],
               "lhand":[
                  -2.414,
                  -1.5630001,
                  -18.487001
               ],
               "userid":1663152230440088,
               "stats":{ }
            },
            {
               "name":"DarkCobra866",
               "rhand":[
                  -5.3710003,
                  -1.978,
                  -7.5110002
               ],
               "playerid":4,
               "position":[
                  -5.5280004,
                  -1.3520001,
                  -7.4040003
               ],
               "lhand":[
                  -5.6520004,
                  -1.7540001,
                  -7.4020004
               ],
               "userid":2649496045086049,
               "stats":{ }
            }
         ]
      }
   ]
}

目前,对于 API 中的其他信息,我的代码如下所示

 matchdetails = {
    'echosessionid' : data['sessionid'],
    'echoclientname' : data['client_name'],
    'echogameclockdisplay' : data['game_clock_display'],
    'echogamestatus' : data['game_status']
    }
    currentMatchDetails = json.dumps(matchdetails)

标签: pythonjsonpython-3.xsorting

解决方案


将您的 JSON 字符串加载到这样的字典中:

import json

json_text = '''
{
   "teams":[
      {
         "players":[
            {
               "name":"rnedds",
               "rhand":[
                  -3.3230002,
                  -1.2370001,
                  -18.701
               ],
               "playerid":0,
               "position":[
                  -2.7520001,
                  -0.96800005,
                  -18.622002
               ],
               "lhand":[
                  -2.414,
                  -1.5630001,
                  -18.487001
               ],
               "userid":1663152230440088,
               "stats":{ }
            },
            {
               "name":"DarkCobra866",
               "rhand":[
                  -5.3710003,
                  -1.978,
                  -7.5110002
               ],
               "playerid":4,
               "position":[
                  -5.5280004,
                  -1.3520001,
                  -7.4040003
               ],
               "lhand":[
                  -5.6520004,
                  -1.7540001,
                  -7.4020004
               ],
               "userid":2649496045086049,
               "stats":{ }
            }
         ]
      }
   ]
}
'''

data = json.loads(json_text)

players = [player['name'] for team in data['teams'] for player in team['players']]

print(players)

上面的代码将导致:

['rnedds', 'DarkCobra866']

推荐阅读