首页 > 解决方案 > 从深度嵌套的 JSON 中提取数据

问题描述

我是 JSON 数据的新手,我正试图深入了解位于 3 个数组和 JSON 文件字典内的嵌套非常深的字典。我正在尝试使用标签为“播放器”的字典。我正在尝试为所有团队提取球员,然后将其移动到 DataFrame 中,以便我可以用于其他分析。

我如何编写循环来获取这些数据?

这是我正在尝试做的,但它不起作用:

rostered = json.dumps(rostered_players)
player_value = [[
                values['playerPoolEntry']['player']
                ]for values in rostered]

这是我正在使用的数据示例:

rostered = 
'''[
  [    
    {
    "appliedStatTotal": 260.05,
    "entries": [
        [
            {
            "injuryStatus": "NORMAL",
            "lineupSlotId": 2,
            "playerId": 2977644,
            "playerPoolEntry": {
                                "appliedStatTotal": 37.6,
                                "id": 2977644,
                                "keeperValue": 56,
                                "keeperValueFuture": 56,
                                "lineupLocked": false,
                                "onTeamId": 1,
                                "player":   {
                                            "firstName": "Todd",
                                            "fullName": "Todd Gurley II",
                                            "id": 2977644,
                                            "injuryStatus": "ACTIVE",
                                            "lastName": "Gurley II"
                                            },
            "rosterLocked": false,
            "tradeLocked": false
                                }
                }
            ]
        ]
    }
],
    [
        {
            "appliedStatTotal": 260.05,
            "entries": [
            [
                {
                "injuryStatus": "NORMAL",
                "lineupSlotId": 4,
                "playerId": 3892889,
                "playerPoolEntry": {
                                "appliedStatTotal": 6.6000000000000005,
                                "id": 3892889,
                                "keeperValue": 5,
                                "keeperValueFuture": 5,
                                "lineupLocked": false,
                                "onTeamId": 2,
                                "player":   {
                                            "defaultPositionId": 3,
                                            "firstName": "Dede",
                                            "fullName": "Dede Westbrook",
                                            "id": 3892889,
                                            "lastName": "Westbrook"
                                            },
            "rosterLocked": false,
            "tradeLocked": false
                                    }
                    }
                ]
            ]
        }
    ]
]'''

标签: pythonarraysjsondictionary

解决方案


一个可能的解决方案是按原样解析给定的 JSON。

rostered=json.loads(rostered)
    player_values=[]
    for level0 in rostered:
        for level1 in level0:
            if 'entries' in level1:
                level2 = level1.get('entries')
                for level3 in level2:
                    for level4 in level3:
                        if 'playerPoolEntry' in level4 and 'player' in level4.get('playerPoolEntry'):
                            player_values.append(level4.get('playerPoolEntry').get('player'))

推荐阅读