2016-07-07 34 views
0

Ich versuche, einige Felder eines JSON zu analysieren, das ist eine Ausgabe für eine Befehlszeile. aber ich kann nicht auf ein Feld zugreifen, habe ich immer diese Fehlermeldung:Typ Fehler beim Analysieren von JSON-Ausgabe Python

TypeError: 'int' object has no attribute '__getitem__' 

mein json Ausgang ist wie folgt:

{"result":"success","totalresults":"1","startnumber":0,"numreturned":1,"tickets":{ 
    "ticket":[ 
     { 
     "id":"2440", 
     "tid":"473970", 
     "deptid":"1", 
     "userid":"0", 
     "name":"John", 
     "email":"[email protected]", 
     "cc":"","c":"P1gqiLym", 
     "date":"2016-07-01 13:00:02", 
     "subject":"test", 
     "status":"stato", 
     "priority":"Medium", 
     "admin":"", 
     "attachment":"image001.jpg", 
     "lastreply":"", 
     "flag":"0", 
     "service":"" 
     } 
    ] 
} 
} 

und mein Code ist dies:

import json 
import sys 
import subprocess 

output=subprocess.call('pywhmcs --url http://whmcs.test.it --username myuser --password mypass --action gettickets --params status="tickets" email="[email protected]"',shell=True) 
values = json.loads(str(output)) 
print (values['result']) 

Warum kann ich auf keine Felder zugreifen? Vielleicht kann ich diese Art von Subprozess-Ausgabe nicht analysieren?

Danke Jungs

+0

Haben Sie nicht, dass 'print (Werte [ 'Ergebnis'])'? Und subprocess.call gibt ein int zurück, das ist nicht der Weg, um Ihre JSON-Zeichenfolge zu erhalten. – polku

+0

ops Entschuldigung, du hast Recht, aber ich habe denselben Fehler. Nun, ich versuche auch os.system aber gleichen Fehler ... Ich versuche, auf String – tafazzi87

+0

zu werfen. Überprüfen Sie die Ausgabe? Und stellen Sie sicher, dass es richtig reagiert. –

Antwort

2

Das Problem ist, dass subprocess.call kehrt die Result der Ausführung; Dies ist entweder 0 (falls erfolgreich) oder eine andere positive Ganzzahl, wenn eine Fehlerbedingung vorliegt.

Wenn Sie nun output['result'] ausführen, ist es das gleiche wie zu tun 0['result'] ist, was keinen Sinn macht, als Zahlen nicht unterstützt durch [], der Fachbegriff dafür ist __getitem__ holen.

Sie müssen subprocess.check_output ausführen; was die Ausgabe als String zurückgibt.

Dann haben Sie ein weiteres kleines Problem, das Sie brauchen, um das Wörterbuch auf dem resultierenden geparsten JSON zu holen, und nicht output.

Kurz gesagt, Sie brauchen:

import json 
# import sys -- not required 
import subprocess 

output=subprocess.check_output('pywhmcs --url http://whmcs.test.it --username myuser --password mypass --action gettickets --params status="tickets" email="[email protected]"',shell=True) 
values = json.loads(str(output)) 
print (values['result']) # note values, not output 
+0

vielen Dank, jetzt funktioniert es gut! – tafazzi87