如何从这个python请求repsonse中获取某个项目

时间:2020-09-30 03:09:01

标签: python python-requests

我以json格式收到此回复,但是如果有人可以向我解释这将是多么感谢,我在理解如何获取我需要的特定物品方面遇到了很多麻烦。我试图进入“杀手”,然后进入“价值”。我尝试使用:

kills = data['data']['kills']['value']
print(kills)

但是那行不通。

{
   "data":{
      "platformInfo":{
         "platformSlug":"origin",
         "platformUserId":"not_aqex",
         "platformUserHandle":"not_aqex",
         "platformUserIdentifier":"not_aqex",
         "avatarUrl":"https://secure.download.dm.origin.com/production/avatar/prod/1/599/208x208.JPEG",
         "additionalParameters":null
      },
      "userInfo":{
         "userId":null,
         "isPremium":false,
         "isVerified":false,
         "isInfluencer":false,
         "countryCode":null,
         "customAvatarUrl":null,
         "customHeroUrl":null,
         "socialAccounts":[
            
         ]
      },
      "metadata":{
         "currentSeason":2,
         "activeLegend":"legend_9",
         "activeLegendName":"Octane"
      },
      "segments":[
         {
            "type":"overview",
            "attributes":{
               
            },
            "metadata":{
               "name":"Lifetime"
            },
            "expiryDate":"2020-09-30T03:10:32.6124204+00:00",
            "stats":{
               "level":{
                  "rank":null,
                  "percentile":null,
                  "displayName":"Level",
                  "displayCategory":"Combat",
                  "category":null,
                  "metadata":{
                     
                  },
                  "value":65,
                  "displayValue":"65",
                  "displayType":"Unspecified"
               },
               "kills":{
                  "rank":null,
                  "percentile":null,
                  "displayName":"Kills",
                  "displayCategory":"Combat",
                  "category":null,
                  "metadata":{
                     
                  },
                  "value":427,
                  "displayValue":"427",
                  "displayType":"Unspecified"
               },
               "seasonWins":{
                  "rank":null,
                  "percentile":null,
                  "displayName":"Season 1 Wins",
                  "displayCategory":"Game",
                  "category":null,
                  "metadata":{
                     
                  },
                  "value":0,
                  "displayValue":"0",
                  "displayType":"Unspecified"
               },
               "rankScore":{
                  "rank":null,
                  "percentile":null,
                  "displayName":"Rank Score",
                  "displayCategory":"Game",
                  "category":null,
                  "metadata":{
                     "iconUrl":"https://trackercdn.com/cdn/apex.tracker.gg/ranks/gold3.png",
                     "rankName":"Gold 3"
                  },
                  "value":3650,
                  "displayValue":"3,650",
                  "displayType":"Unspecified"
               },
               "season4Wins":{
                  "rank":null,
                  "percentile":null,
                  "displayName":"Season 4 Wins",
                  "displayCategory":"Game",
                  "category":null,
                  "metadata":{
                     
                  },
                  "value":10,
                  "displayValue":"10",
                  "displayType":"Unspecified"
               }
            }
         },
         {
            "type":"legend",
            "attributes":{
               "id":"legend_9"
            },
            "metadata":{
               "name":"Octane",
               "imageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/octane-tile.png",
               "tallImageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/octane-tall.png",
               "bgImageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/octane-concept-bg-small.jpg",
               "isActive":true
            },
            "expiryDate":"2020-09-30T03:10:32.6124204+00:00",
            "stats":{
               "kills":{
                  "rank":null,
                  "percentile":79,
                  "displayName":"Kills",
                  "displayCategory":"Combat",
                  "category":null,
                  "metadata":{
                     
                  },
                  "value":279,
                  "displayValue":"279",
                  "displayType":"Unspecified"
               },
               "season4Wins":{
                  "rank":null,
                  "percentile":96.7,
                  "displayName":"Season 4 Wins",
                  "displayCategory":"Game",
                  "category":null,
                  "metadata":{
                     
                  },
                  "value":10,
                  "displayValue":"10",
                  "displayType":"Unspecified"
               }
            }
         },
         {
            "type":"legend",
            "attributes":{
               "id":"legend_7"
            },
            "metadata":{
               "name":"Lifeline",
               "imageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/lifeline-tile.png",
               "tallImageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/lifeline-tall.png",
               "bgImageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/lifeline-concept-bg-small.jpg",
               "isActive":false
            },
            "expiryDate":"2020-09-30T03:10:32.6124204+00:00",
            "stats":{
               "kills":{
                  "rank":null,
                  "percentile":69,
                  "displayName":"Kills",
                  "displayCategory":"Combat",
                  "category":null,
                  "metadata":{
                     
                  },
                  "value":136,
                  "displayValue":"136",
                  "displayType":"Unspecified"
               }
            }
         },
         {
            "type":"legend",
            "attributes":{
               "id":"legend_8"
            },
            "metadata":{
               "name":"Pathfinder",
               "imageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/pathfinder-tile.png",
               "tallImageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/pathfinder-tall.png",
               "bgImageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/pathfinder-concept-bg-small.jpg",
               "isActive":false
            },
            "expiryDate":"2020-09-30T03:10:32.6124204+00:00",
            "stats":{
               "seasonWins":{
                  "rank":null,
                  "percentile":null,
                  "displayName":"Season 1 Wins",
                  "displayCategory":"Game",
                  "category":null,
                  "metadata":{
                     
                  },
                  "value":0,
                  "displayValue":"0",
                  "displayType":"Unspecified"
               }
            }
         },
         {
            "type":"legend",
            "attributes":{
               "id":"legend_5"
            },
            "metadata":{
               "name":"Bloodhound",
               "imageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/bloodhound-tile.png",
               "tallImageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/bloodhound-tall.png",
               "bgImageUrl":"https://trackercdn.com/cdn/apex.tracker.gg/legends/bloodhound-concept-bg-small.jpg",
               "isActive":false
            },
            "expiryDate":"2020-09-30T03:10:32.6124204+00:00",
            "stats":{
               "kills":{
                  "rank":null,
                  "percentile":43,
                  "displayName":"Kills",
                  "displayCategory":"Combat",
                  "category":null,
                  "metadata":{
                     
                  },
                  "value":12,
                  "displayValue":"12",
                  "displayType":"Unspecified"
               }
            }
         }
      ],
      "availableSegments":[
         {
            "type":"legend",
            "attributes":{
               
            },
            "metadata":{
               
            }
         }
      ],
      "expiryDate":"2020-09-30T03:10:32.6124204+00:00"
   }
}

来自编辑者的注意:我使用This cool online JSON Formatter & Validator来清理提供的JSON数据。我经常使用此工具,并强烈推荐它。

2 个答案:

答案 0 :(得分:1)

这是您的数据的精简版本,仅使用kills键及其每个value键:

{
   "data":{
      "segments":[
         {
            "stats":{
               "kills":{
                  "value":427,
               },
            }
         },
         {
            "stats":{
               "kills":{
                  "value":279,
               },
            }
         },
         {
            "stats":{
               "kills":{
                  "value":136,
               }
            }
         },
         {
            "stats":{
            }
         },
         {
            "stats":{
               "kills":{
                  "value":12,
               }
            }
         }
      ],
   }
}

请注意,segments键下方的列表中有五个“段”词典,但是其中只有四个包含kills键。您可以使用以下方法为这四个中的每一个地址value

record['data']['segments'][0]['stats']['kills']['value']
record['data']['segments'][1]['stats']['kills']['value']
record['data']['segments'][2]['stats']['kills']['value']
record['data']['segments'][4]['stats']['kills']['value']

index == 3中的segments条目没有kills键,因此尽管有五个段,但只有四个kills/value值。这是支持所有这些的代码,以及运行此代码的结果:

data = """{
    "data":{
        "segments":[
           ...
}"""
       

record = json.loads(data)
print(record['data']['segments'][0]['stats']['kills']['value'])
print(record['data']['segments'][1]['stats']['kills']['value'])
print(record['data']['segments'][2]['stats']['kills']['value'])
try:
    print(record['data']['segments'][3]['stats']['kills']['value'])
except Exception:
    print("invalid reference")
print(record['data']['segments'][4]['stats']['kills']['value'])

结果:

427
279
136
invalid reference
12

请注意,尽管我显示了上面数据的修剪版本,但是我在提供的完整数据版本上运行了此代码,这确实是有效的JSON。

答案 1 :(得分:0)

只是扩展@steve的答案

更多修剪版本,以实现更好的可视化

   "data":
   {          
      "segments":
      [
            {"stats":{"kills":{"value":427}}},
            {"stats":{"kills":{"value":279}}},
            {"stats":{"kills":{"value":136}}},
            {"stats":{"seasonWins":{"value":0}}},
            {"stats":{"kills":{"value":12}}},
      ],
      "availableSegments":
      [
         {"type":"legend", "attributes":{}, "metadata":{}}
      ],
      "expiryDate":"2020-09-30T03:10:32.6124204+00:00"
   }

让循环更好地理解

for segments in data['data']['segments']:
    if 'kills' in segments['stats']:      # condition when expected node is not present
        print(segments['stats']['kills'])
        print(segments['stats']['kills']['value'])

输出

{'value': 427}
427
{'value': 279}
279
{'value': 136}
136
{'value': 12}
12