Python中的JSON:如何获取数组的特定部分?

时间:2013-01-07 15:16:03

标签: python json

我正在尝试在Python中获取JSON对象的特定值。在我可以使用之前:

  

数据[ '数据'] [ '数据2']

获取与data2相关联的特定值,但这有点不同,我的JSON文件现在更复杂了,是这个

{
    "data": {
        "playerStatSummaries": {
            "playerStatSummarySet": [
                {
                    "aggregatedStats": {
                        "stats": []
                    }, 
                    "leaves": 0, 
                    "losses": 0, 
                    "maxRating": 0, 
                    "modifyDate": "/Date(1357567398182)/", 
                    "playerStatSummaryType": "Unranked3x3", 
                    "rating": 400, 
                    "wins": 5
                }, 
                {
                    "aggregatedStats": {
                        "stats": []
                    }, 
                    "leaves": 0, 
                    "losses": 0, 
                    "maxRating": 0, 
                    "modifyDate": "/Date(1357567398182)/", 
                    "playerStatSummaryType": "AramUnranked6x6", 
                    "rating": 400, 
                    "wins": 0
                }, 
                {
                    "aggregatedStats": {
                        "stats": [
                            {
                                "statType": "TOTAL_CHAMPION_KILLS", 
                                "value": 68
                            }, 
                            {
                                "statType": "TOTAL_ASSISTS", 
                                "value": 116
                            }, 
                            {
                                "statType": "TOTAL_MINION_KILLS", 
                                "value": 1854
                            }, 
                            {
                                "statType": "TOTAL_TURRETS_KILLED", 
                                "value": 22
                            }, 
                            {
                                "statType": "TOTAL_NEUTRAL_MINIONS_KILLED", 
                                "value": 359
                            }
                        ]
                    }, 
                    "leaves": 0, 
                    "losses": 5, 
                    "maxRating": 1505, 
                    "modifyDate": "/Date(1357261303440)/", 
                    "playerStatSummaryType": "RankedSolo5x5", 
                    "rating": 1505, 
                    "wins": 9
                }, 
                {
                    "aggregatedStats": {
                        "stats": [
                            {
                                "statType": "TOTAL_CHAMPION_KILLS", 
                                "value": 369
                            }, 
                            {
                                "statType": "TOTAL_ASSISTS", 
                                "value": 535
                            }, 
                            {
                                "statType": "TOTAL_MINION_KILLS", 
                                "value": 9917
                            }, 
                            {
                                "statType": "TOTAL_TURRETS_KILLED", 
                                "value": 78
                            }, 
                            {
                                "statType": "TOTAL_NEUTRAL_MINIONS_KILLED", 
                                "value": 1050
                            }
                        ]
                    }, 
                    "leaves": 0, 
                    "losses": 35, 
                    "maxRating": 1266, 
                    "modifyDate": "/Date(1323496849000)/", 
                    "playerStatSummaryType": "RankedTeam5x5", 
                    "rating": 1266, 
                    "wins": 39
                }, 
                {
                    "aggregatedStats": {
                        "stats": [
                            {
                                "statType": "TOTAL_CHAMPION_KILLS", 
                                "value": 29
                            }, 
                            {
                                "statType": "TOTAL_ASSISTS", 
                                "value": 17
                            }, 
                            {
                                "statType": "TOTAL_MINION_KILLS", 
                                "value": 176
                            }, 
                            {
                                "statType": "TOTAL_TURRETS_KILLED", 
                                "value": 8
                            }, 
                            {
                                "statType": "TOTAL_NEUTRAL_MINIONS_KILLED", 
                                "value": 12
                            }
                        ]
                    }, 
                    "leaves": 0, 
                    "losses": 0, 
                    "maxRating": 1200, 
                    "modifyDate": "/Date(1326521499000)/", 
                    "playerStatSummaryType": "CoopVsAI", 
                    "rating": 1200, 
                    "wins": 2
                }, 
                {
                    "aggregatedStats": {
                        "stats": [
                            {
                                "statType": "TOTAL_CHAMPION_KILLS", 
                                "value": 150
                            }, 
                            {
                                "statType": "TOTAL_ASSISTS", 
                                "value": 184
                            }, 
                            {
                                "statType": "TOTAL_MINION_KILLS", 
                                "value": 3549
                            }, 
                            {
                                "statType": "TOTAL_TURRETS_KILLED", 
                                "value": 24
                            }, 
                            {
                                "statType": "TOTAL_NEUTRAL_MINIONS_KILLED", 
                                "value": 224
                            }
                        ]
                    }, 
                    "leaves": 0, 
                    "losses": 17, 
                    "maxRating": 0, 
                    "modifyDate": "/Date(1350098520000)/", 
                    "playerStatSummaryType": "RankedTeam3x3", 
                    "rating": 1308, 
                    "wins": 22
                }, 
                {
                    "aggregatedStats": {
                        "stats": [
                            {
                                "statType": "TOTAL_CHAMPION_KILLS", 
                                "value": 15
                            }, 
                            {
                                "statType": "TOTAL_ASSISTS", 
                                "value": 185
                            }, 
                            {
                                "statType": "TOTAL_MINION_KILLS", 
                                "value": 250
                            }, 
                            {
                                "statType": "TOTAL_TURRETS_KILLED", 
                                "value": 4
                            }, 
                            {
                                "statType": "TOTAL_NEUTRAL_MINIONS_KILLED", 
                                "value": 15
                            }
                        ]
                    }, 
                    "leaves": 0, 
                    "losses": 3, 
                    "maxRating": 1365, 
                    "modifyDate": "/Date(1321778545000)/", 
                    "playerStatSummaryType": "RankedPremade5x5", 
                    "rating": 1365, 
                    "wins": 8
                }, 
                {
                    "aggregatedStats": {
                        "stats": [
                            {
                                "statType": "TOTAL_CHAMPION_KILLS", 
                                "value": 672
                            }, 
                            {
                                "statType": "AVERAGE_CHAMPIONS_KILLED", 
                                "value": 9
                            }, 
                            {
                                "statType": "MAX_COMBAT_PLAYER_SCORE", 
                                "value": 889
                            }, 
                            {
                                "statType": "AVERAGE_OBJECTIVE_PLAYER_SCORE", 
                                "value": 771
                            }, 
                            {
                                "statType": "MAX_TEAM_OBJECTIVE", 
                                "value": 2
                            }, 
                            {
                                "statType": "MAX_NODE_CAPTURE", 
                                "value": 14
                            }, 
                            {
                                "statType": "MAX_OBJECTIVE_PLAYER_SCORE", 
                                "value": 1424
                            }, 
                            {
                                "statType": "MAX_TOTAL_PLAYER_SCORE", 
                                "value": 1950
                            }, 
                            {
                                "statType": "AVERAGE_NUM_DEATHS", 
                                "value": 10
                            }, 
                            {
                                "statType": "TOTAL_DECAYER", 
                                "value": 105
                            }, 
                            {
                                "statType": "TOTAL_ASSISTS", 
                                "value": 931
                            }, 
                            {
                                "statType": "AVERAGE_NODE_NEUTRALIZE", 
                                "value": 6
                            }, 
                            {
                                "statType": "AVERAGE_NODE_CAPTURE_ASSIST", 
                                "value": 2
                            }, 
                            {
                                "statType": "MAX_NODE_CAPTURE_ASSIST", 
                                "value": 5
                            }, 
                            {
                                "statType": "MAX_ASSISTS", 
                                "value": 25
                            }, 
                            {
                                "statType": "AVERAGE_NODE_NEUTRALIZE_ASSIST", 
                                "value": 1
                            }, 
                            {
                                "statType": "AVERAGE_TOTAL_PLAYER_SCORE", 
                                "value": 1182
                            }, 
                            {
                                "statType": "MAX_NODE_NEUTRALIZE_ASSIST", 
                                "value": 3
                            }, 
                            {
                                "statType": "AVERAGE_COMBAT_PLAYER_SCORE", 
                                "value": 413
                            }, 
                            {
                                "statType": "AVERAGE_NODE_CAPTURE", 
                                "value": 8
                            }, 
                            {
                                "statType": "MAX_CHAMPIONS_KILLED", 
                                "value": 20
                            }, 
                            {
                                "statType": "TOTAL_NODE_NEUTRALIZE", 
                                "value": 391
                            }, 
                            {
                                "statType": "AVERAGE_TEAM_OBJECTIVE", 
                                "value": 1
                            }, 
                            {
                                "statType": "AVERAGE_ASSISTS", 
                                "value": 11
                            }, 
                            {
                                "statType": "TOTAL_NODE_CAPTURE", 
                                "value": 447
                            }, 
                            {
                                "statType": "MAX_NODE_NEUTRALIZE", 
                                "value": 11
                            }, 
                            {
                                "statType": "MAX_NUM_DEATHS", 
                                "value": 16
                            }
                        ]
                    }, 
                    "leaves": 0, 
                    "losses": 0, 
                    "maxRating": 0, 
                    "modifyDate": "/Date(1357567398182)/", 
                    "playerStatSummaryType": "OdinUnranked", 
                    "rating": 400, 
                    "wins": 43
                }, 
                {
                    "aggregatedStats": {
                        "stats": []
                    }, 
                    "leaves": 0, 
                    "losses": 0, 
                    "maxRating": 0, 
                    "modifyDate": "/Date(1357567398182)/", 
                    "playerStatSummaryType": "AramUnranked2x2", 
                    "rating": 400, 
                    "wins": 0
                }, 
                {
                    "aggregatedStats": {
                        "stats": []
                    }, 
                    "leaves": 0, 
                    "losses": 0, 
                    "maxRating": 0, 
                    "modifyDate": "/Date(1357567398182)/", 
                    "playerStatSummaryType": "AramUnranked1x1", 
                    "rating": 400, 
                    "wins": 0
                }, 
                {
                    "aggregatedStats": {
                        "stats": []
                    }, 
                    "leaves": 0, 
                    "losses": 0, 
                    "maxRating": 0, 
                    "modifyDate": "/Date(1357567398182)/", 
                    "playerStatSummaryType": "AramUnranked3x3", 
                    "rating": 400, 
                    "wins": 0
                }, 
                {
                    "aggregatedStats": {
                        "stats": [
                            {
                                "statType": "TOTAL_CHAMPION_KILLS", 
                                "value": 10269
                            }, 
                            {
                                "statType": "TOTAL_DECAYER", 
                                "value": 0
                            }, 
                            {
                                "statType": "TOTAL_ASSISTS", 
                                "value": 15722
                            }, 
                            {
                                "statType": "TOTAL_MINION_KILLS", 
                                "value": 262793
                            }, 
                            {
                                "statType": "TOTAL_TURRETS_KILLED", 
                                "value": 1954
                            }, 
                            {
                                "statType": "TOTAL_NEUTRAL_MINIONS_KILLED", 
                                "value": 43898
                            }, 
                            {
                                "statType": "TOTAL_DEATHS_PER_SESSION", 
                                "value": 1513
                            }
                        ]
                    }, 
                    "leaves": 1, 
                    "losses": 0, 
                    "maxRating": 0, 
                    "modifyDate": "/Date(1357567398182)/", 
                    "playerStatSummaryType": "Unranked", 
                    "rating": 400, 
                    "wins": 1691
                }, 
                {
                    "aggregatedStats": {
                        "stats": []
                    }, 
                    "leaves": 0, 
                    "losses": 0, 
                    "maxRating": 0, 
                    "modifyDate": "/Date(1357567398182)/", 
                    "playerStatSummaryType": "AramUnranked5x5", 
                    "rating": 400, 
                    "wins": 0
                }
            ]
        }, 
        "previousFirstWinOfDay": "/Date(1357489166306)/", 
        "userId": 55060
    }, 
    "success": true
}

正如您所看到的那样,这真的很长,我的问题是,我如何仅从特定playerStatSummarySet集中获取特定值?就像我们说的那样,我只想从playerStatSummaryType值为RankedSolo5x5的集合中获取评级值,我该怎么做?

这是我到目前为止从JSON文件中获取数据的内容。

with open('data.txt', 'r') as f:
    data = json.load(f)

3 个答案:

答案 0 :(得分:4)

如果您必须使用复杂的json对象,我建议您查看为xpath提供jsonimport jsonpath import json with open('/test.json', 'r') as f: data = json.load(f) path = "$.[?(@.playerStatSummaryType == 'RankedSolo5x5')].rating" jsonpath.jsonpath(data,path) 对象语言的jsonpath

示例:

[1505]

<强>出:

{{1}}

答案 1 :(得分:1)

使用列表理解

with open('data.txt', 'r') as f:
    data = json.load(f)
rating = [summary["rating"] for summary
          in data["data"]["playerStatSummaries"]["playerStatSummarySet"]
          if summary["playerStatSummaryType"] == "RankedSolo5x5"][0]

答案 2 :(得分:-1)

您仍然可以这样做,但您必须正确访问数据结构。 json.load()返回的是JSON object,它与Python字典相同。这个obj中有一个名为'data'的密钥,它与另一个对象 - 字典等关联,直到你到达'playerStatSummaries'对象,该对象的数据成员实际上是'playerStatSummarySet'。一个Python列表而不是另一个对象字典。

这是一个如何搜索摘要集列表并找到特定条目的示例 - 记住由于此数据项是列表而不是字典对象,因此您可以逐步浏览其中的每个条目以查找你正在寻找而不仅仅是查找它的名字。

import json

with open('data.txt', 'r') as f:
    jsonObj = json.load(f)

targetSummaryType = 'RankedSolo5x5'
for summarySet in jsonObj['data']['playerStatSummaries']['playerStatSummarySet']:
    if summarySet['playerStatSummaryType'] == targetSummaryType:
        print 'max rating for {}: {}'.format(targetSummaryType,
                                             summarySet['maxRating'])
        break  # if you only expect there to be one

输出:

max rating for RankedSolo5x5: 1505

为了弄清楚需要什么,我发现最初pprint()使整个jsonObj变得非常有用,这使得结构很容易看到。