繁体   English   中英

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

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

我正在尝试在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)

如果你必须使用复杂的json对象,我建议你看一下为json对象提供xpath语言的jsonpath

一个例子:

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

出:

[1505]

使用列表理解

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]

您仍然可以这样做,但您必须正确访问数据结构。 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很有用,这使得结构很容易看到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM