python从json获取正确信息的问题

python从json获取正确信息的问题,python,json,Python,Json,我有问题,然后我尝试从正确的信息。 例如,在我在post中发出请求后,我有非常大的json输出(我不能使用get) 我不能全部展示,因为它很大。 如您所见,“排名”1在该请求中存在20个排名,其中包含内容、总成本等信息,我需要将它们全部挑选出来。如6级内容和totalCost,8级内容和totalCost 首先,在python中,我使用代码获取json数据 import requests import json url = "https://www.verivox.de/api/e

我有问题,然后我尝试从正确的信息。 例如,在我在post中发出请求后,我有非常大的json输出(我不能使用get)

我不能全部展示,因为它很大。 如您所见,
“排名”1
在该请求中存在20个排名,其中包含
内容
总成本
等信息,我需要将它们全部挑选出来。如
6级内容
totalCost
8级内容
totalCost

首先,在python中,我使用代码获取
json
数据

import requests
import json


url = "https://www.verivox.de/api/energy/offers/electricity/postCode/10555/custom?"

payload="{\"profile\":\"H0\",\"prepayment\":true,\"signupOnly\":true,\"includePackageTariffs\":true,\"includeTariffsWithDeposit\":true,\"includeNonCompliantTariffs\":true,\"bonusIncluded\":\"non-compliant\",\"maxResultsPerPage\":20,\"onlyProductsWithGoodCustomerRating\":false,\"benchmarkTariffId\":741122,\"benchmarkPermanentTariffId\":38,\"paolaLocationId\":\"71085\",\"includeEcoTariffs\":{\"includesNonEcoTariffs\":true},\"maxContractDuration\":240,\"maxContractProlongation\":240,\"usage\":{\"annualTotal\":3500,\"offPeakUsage\":0},\"priceGuarantee\":{\"minDurationInMonths\":0},\"maxTariffsPerProvider\":999,\"cancellationPeriod\":null,\"previewDisplayTime\":null,\"onlyRegionalTariffs\":false,\"sorting\":{\"criterion\":\"TotalCosts\",\"direction\":\"Ascending\"},\"includeSpecialBonusesInCalculation\":\"None\",\"totalCostViewMode\":1,\"ecoProductType\":0}"
headers = {
  'Content-Type': 'application/json',
  'Cookie': '__cfduid=d97a159bb287de284487ebdfa0fd097b41606303469; ASP.NET_SessionId=jfg3y20s31hclqywloocjamz; 0e3a873fd211409ead79e21fffd2d021=product=Power&ReturnToCalcLink=/power/&CustomErrorsEnabled=False&IsSignupWhiteLabelled=False; __RequestVerificationToken=vrxksNqu8CiEk9yV-_QHiinfCqmzyATcGg18dAqYXqR0L8HZNlvoHZSZienIAVQ60cB40aqfQOXFL9bsvJu7cFOcS2s1'
}

response = requests.request("POST", url, headers=headers, data=payload)

jsondata = response.json()

# print(response.text)
因为它工作得很好,但是我试着挑选一些我需要的数据,就像我在得到之前说的那样

    for Rankdata in str(jsondata['rank']):
KeyError: 'rank'
我的错误代码

dataRank = []

for Rankdata in str(jsondata['rank']):
   dataRank.append({
     'tariff':Rankdata['content'],
     'cost': Rankdata['totalCost'],
     'sumOfOneTimeBonuses': Rankdata['content'],
     'savings': Rankdata['content']
     })
然后我试着用另一种方法。只需获取一个或一些数据,但不能工作太多

data = response.json()
#print(data)
test = float((data['rank']['totalCost']['content']))
我知道我的代码并不完美,但我第一次处理的是
json
什么东西这么大,这么难。如果在我的例子中展示我如何挑选排名1-20的数据并打印出来,我将非常感激


感谢您的帮助。

如果仔细查看json中的最高级别,您可以看到key
提供的值是一个dict列表。因此,您可以这样循环:

for offer in jsondata['offers']:
  print(offer.get('rank'))
  print(offer.get('provider').get('id'))

提供中的其他键也是如此。

键是
“提供”
,所以对jsondata[“提供”]:
中的排名数据使用
。而这
对str中的Rankdata(jsondata['rank']):
并没有达到您期望的效果(尽管我不知道您期望它做什么)@YevhenKuzmovych我希望选择例如值为1的rank,值为500的totalCost,以及我得到的更正
TypeError:字符串索引必须是整数
谢谢你的工作。
for offer in jsondata['offers']:
  print(offer.get('rank'))
  print(offer.get('provider').get('id'))