【发布时间】:2018-09-12 05:24:21
【问题描述】:
所以我在这里被难住了...我正在尝试从 API 中过滤 JSON 结果,但在查找下面的嵌套“playerID”并将整个 JSON 块输出到“类型”时遇到问题
JSON
{
"included": [
{
"type": "participant",
"id": "efb753a7-bc6b-4cf0-925a-df4693b51690",
"attributes": {
"actor": "",
"shardId": "pc-na",
"stats": {
"DBNOs": 0,
"assists": 0,
"boosts": 0,
"damageDealt": 21.78,
"deathType": "byplayer",
"headshotKills": 0,
"heals": 1,
"killPlace": 69,
"killPoints": 1204,
"killPointsDelta": -12.1259718,
"killStreaks": 0,
"kills": 0,
"lastKillPoints": 0,
"lastWinPoints": 0,
"longestKill": 0,
"mostDamage": 0,
"name": "AshTrayyyyyyyy",
"playerId": "account.a6e705568e1e490189d59606892765a9",
"revives": 0,
"rideDistance": 0,
"roadKills": 0,
"teamKills": 0,
"timeSurvived": 293,
"vehicleDestroys": 0,
"walkDistance": 197.17308,
"weaponsAcquired": 0,
"winPlace": 28,
"winPoints": 1152,
"winPointsDelta": -4.64524174
}
}
},
{
"type": "participant",
"id": "e916ce2e-aea4-4806-9aa1-449113df793c",
"attributes": {
"actor": "",
"shardId": "pc-na",
"stats": {
"DBNOs": 0,
"assists": 0,
"boosts": 1,
"damageDealt": 54.3429337,
"deathType": "byplayer",
"headshotKills": 0,
"heals": 7,
"killPlace": 56,
"killPoints": 1185,
"killPointsDelta": -5.10656166,
"killStreaks": 0,
"kills": 0,
"lastKillPoints": 0,
"lastWinPoints": 0,
"longestKill": 0,
"mostDamage": 0,
"name": "PanzerCheneyJr",
"playerId": "account.380f694417594236a8dc9f5dcc0b0ed5",
"revives": 0,
"rideDistance": 1869.12939,
"roadKills": 0,
"teamKills": 0,
"timeSurvived": 1476,
"vehicleDestroys": 0,
"walkDistance": 2950.75659,
"weaponsAcquired": 0,
"winPlace": 10,
"winPoints": 1184,
"winPointsDelta": 15.2799187
}
}
},
{
"type": "roster",
"id": "f876ef81-bd51-494b-9cf0-49d4da725ff0",
"attributes": {
"shardId": "pc-na",
"stats": {
"rank": 40,
"teamId": 11
},
"won": "false"
},
"relationships": {
"participants": {
"data": [
{
"type": "participant",
"id": "0c936615-eb39-42f8-bbe3-5b17bcf6c7dd"
},
{
"type": "participant",
"id": "62a6ed31-f5bf-4b0a-b867-8260774dcb90"
}
]
},
"team": {
"data": null
}
}
},
{
"type": "participant",
"id": "8b63d4d9-a673-48d8-9e56-cfe2109044d8",
"attributes": {
"actor": "",
"shardId": "pc-na",
"stats": {
"DBNOs": 1,
"assists": 1,
"boosts": 5,
"damageDealt": 466.477539,
"deathType": "byplayer",
"headshotKills": 0,
"heals": 4,
"killPlace": 3,
"killPoints": 1105,
"killPointsDelta": 54.3647232,
"killStreaks": 0,
"kills": 4,
"lastKillPoints": 0,
"lastWinPoints": 0,
"longestKill": 74,
"mostDamage": 0,
"name": "JustFallen",
"playerId": "account.1ea2035542e44f37bb2b7a3679a91fcc",
"revives": 0,
"rideDistance": 1945.68457,
"roadKills": 0,
"teamKills": 0,
"timeSurvived": 1561,
"vehicleDestroys": 0,
"walkDistance": 2272.8418,
"weaponsAcquired": 0,
"winPlace": 4,
"winPoints": 1179,
"winPointsDelta": 28.698019
}
}
}
}
对于 Python,这是我完全难过的地方。我要做的是返回整个参与者块,以及嵌套在其中的所有内容。但我需要通过属性 -> stats 下的“playerID”进行过滤。
这是我尝试过的 Python...
Python
included = (data['included'])
included = json.dumps(included)
input_dict = json.loads(included)
print(playerid)
for d in input_dict:
for key, value in d.iteritems():
print (key, value)
output_dict = [x for x in input_dict if x['playerID'] == playerid]
output_json = json.dumps(output_dict)
print(output_json)
非常感谢任何帮助。
【问题讨论】:
-
您在此处粘贴的内容不是有效的 JSON。看起来
included是一个dicts 数组,但没有]可以关闭数组。 -
同时,你为什么要做一个
dumps只是为了在结果字符串上做一个loads? -
我只是复制了整个 JSON 的一个片段,太长了无法发布。当我没有进行转储然后加载时遇到问题...我知道它不是有效的 JSON,但这就是我从 API 中提取它的方式,我无能为力。
-
我不相信您可能拥有任何数据,其中转储后立即加载可以解决任何问题。那只是挥舞着一根棍子,希望它是一根魔杖。而且,您的实际数据不是有效的 JSON 也不可能是真的,或者您无法转储并加载它,因此您在此处发布的内容不是您问题的有效示例。请阅读帮助中的minimal reproducible example,了解如何创建一个无需猜测即可回答的问题(通常最终得到一个无法回答您实际问题的答案)。