4

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)
1
  • 1
    It's just a list. Use it like any other. Commented Jan 7, 2013 at 15:18

3 Answers 3

4

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]
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you, while there were many solutions to my answer here you made it really convenient and easy to understand.
1

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]

Comments

-1

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.