2017-08-29 2 views
-1

So meine JSON-Daten sieht wie folgt aus. Meine Codezeile: print(jsonData["orderData"]["txnType"]) druckt das Wort VERKAUF dann erhalte ich einen Fehler, der TypeError: 'NoneType' object is not subscriptable sagt Mit meinem Verständnis warum erhalte ich diesen Fehler, wenn der Wert offenbar dort und gedruckt ist?Python Nonetype-Fehler, wenn Wert existiert Python

{ 
    'orderData':{ 
     'date':'2017-08-29T12:55:19-07:00', 
     'receipt':'A2ZC5N96', 
     'promo':{ 
     '@nil':'true' 
     }, 
     'pmtType':'PYPL', 
     'txnType':'SALE', 
     'item':'37', 
     'amount':'104.28', 
     'site':'PASSIOPROD', 
     'affi':'BCPATRON2', 
     'country':'US', 
     'state':'OH', 
     'lastName':{ 
     '@nil':'true' 
     }, 
     'firstName':{ 
     '@nil':'true' 
     }, 
     'currency':'USD', 
     'email':{ 
     '@nil':'true' 
     }, 
     'zip':'43206', 
     'rebillAmount':'97.00', 
     'processedPayments':'1', 
     'futurePayments':'998', 
     'nextPaymentDate':'2017-09-29T12:55:19-07:00', 
     'status':'ACTIVE', 
     'accountAmount':'44.09', 
     'role':'AFFILIATE', 
     'customerDisplayName':{ 
     '@nil':'true' 
     }, 
     'title':'aaa', 
     'recurring':'true', 
     'physical':'false', 
     'customerRefundableState':'REFUNDABLE' 
    } 
} 

FULL CODE:

devKeys = ["KEUYS"] 
apiKeys = ["API"] 
sales = [] 
refunds = [] 
totalSales = [] 
x = 0 

while x < len(devKeys): 
y = 0 
indSale = 0 
indRefund = 0 
indTotal = 0 
totalTransactions = 0 

payload = devKeys[x]+":"+apiKeys[x] 
headers = {"Accept": "application/json", "Authorization": payload} 
r = requests.get('https://api.clickbank.com/rest/1.3/orders/list', headers=headers) 
jsonData = json.loads(r.text) 
text = r.text 
if ":[" not in text: #This line is here because the JSON looks different if theres only one entry 
    print(jsonData["orderData"]["txnType"]) 
    if jsonData["orderData"]["txnType"] == "SALE": 
     indSale+=44 
     indTotal+=1 
    else: 
     indRefund+=44 
else: 
    totalTransactions = len(jsonData["orderData"]) 
    while y < totalTransactions: 

     if jsonData["orderData"][y]["txnType"] == "SALE": 
      indSale+=44 
      indTotal+=1 
     else: 
      indRefund+=44 
     y+=1 

sales.append(indSale) 
refunds.append(indRefund) 
totalSales.append(indTotal) 
x+=1 
+0

Es sieht so aus, als ob Sie dies in einer Schleife ausführen, und Ihre Struktur ist eine Liste solcher OrderDatas. Kann nicht viel ohne etwas mehr Kontext sagen. –

+1

Zeigen Sie uns den tatsächlichen, vollständigen Code, der den Fehler verursacht. Nur die eine Zeile, die Sie gezeigt haben, hat nichts falsch gemacht. – jwodder

+0

Nur vollen Code hinzugefügt – Sagar

Antwort

0

Mit Ihrer Daten, kann ich ohne Probleme den richtigen Wert auszudrucken, was bedeutet, dass die Daten gültig sind. Überprüfen Sie also bitte, ob das Objekt "jsonData" "unterscriptfähig" ist und dass es den Schlüssel "orderData" enthält, auf den im Markdown verwiesen wird. Es scheint, als ob Sie die erwartete JSON-Antwort möglicherweise nicht erhalten.

Siehe auch für Unterskript: In Python, what does it mean if an object is subscriptable or not?

Hoffe, es hilft.

+0

gerade bemerkt, dass Sie verwiesen [y], aber es gibt keine Liste von Objekten unter jsonData ["OrderData"] in Ihrem JSON, so dass dies nicht funktioniert. – Leo

Verwandte Themen