Mark Berube
Mark Berube

Reputation: 204

JSON in Python: How do I get specific parts of an array?

I'm trying to get a specific value in Python of a JSON object. Before I could use something like:

data['data']['data2']

to get a certain value that is associated with data2 but this is a little different, my JSON file is now more complex and is this

{
    "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
}

As you can see this is really long, my question is, how would I grab only specific values from a certain playerStatSummarySet set? Like let's say I only wanted to grab the rating value from the set with the playerStatSummaryType value of RankedSolo5x5 how would I do that?

Here's what I have going so far to get the data from the JSON file.

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

Upvotes: 4

Views: 815

Answers (3)

martineau
martineau

Reputation: 123463

You can still do it, but you have to access the data structure properly. What json.load() is returning is a JSON object which is the same as a Python dictionary. This obj has a key named 'data' in it that is associated with another object-dictionary, etc down until you get to the 'playerStatSummaries' object which has a data member keyed with 'playerStatSummarySet' that is actually a Python list rather than another object-dictionary.

Here's an example of how to search through that list of summary sets and find a specific entry -- remembering that since this data item is a list rather than dictionary object you have step through each of the entries in it to find the one you're looking for rather than just looking-up its name.

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

Output:

max rating for RankedSolo5x5: 1505

To figure out what was needed I found it useful to initially pprint() the whole jsonObj which made the structure very easy to see.

Upvotes: -1

root
root

Reputation: 80346

if you have to work with complex json objects, I suggest you take a look at jsonpath that offers xpath like language for json objects.

An example:

import jsonpath
import json
with open('/test.json', 'r') as f:
    data = json.load(f)
path = "$.[?(@.playerStatSummaryType == 'RankedSolo5x5')].rating"
jsonpath.jsonpath(data,path)

out:

[1505]

Upvotes: 4

Thorsten Kranz
Thorsten Kranz

Reputation: 12755

Use a list comprehension

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]

Upvotes: 1

Related Questions