2016-07-07 4 views
0

Я пытаюсь разобрать некоторые поля json, то есть вывод для командной строки. но я не могу получить доступ к любому полю, я всегда эту ошибку:ошибка типа при разборе json output python

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

мой выход JSON как это:

{"result":"success","totalresults":"1","startnumber":0,"numreturned":1,"tickets":{ 
    "ticket":[ 
     { 
     "id":"2440", 
     "tid":"473970", 
     "deptid":"1", 
     "userid":"0", 
     "name":"John", 
     "email":"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":"" 
     } 
    ] 
} 
} 

и мой код это:

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']) 

Почему я не могу получить доступ к любым полям? возможно, я не могу разобрать этот тип вывода подпроцесса?

благодарит ребят

+0

Не значит 'печати (значения [ 'результат'])'? И subprocess.call возвращает int, это не способ получить вашу строку json. – polku

+0

ops жаль, что вы правы, но у меня такая же ошибка. ну, я тоже попробую os.system, но ту же ошибку ... я пытаюсь привести в строку – tafazzi87

+0

Проверьте вывод? И убедитесь, что он имеет надлежащий ответ. –

ответ

2

Проблема заключается в том, что subprocess.call возвращает ResultCode исполнения; который является либо 0 (если успешно), либо любым другим положительным целым, если есть условие ошибки.

Теперь, когда вы выполняете output['result'], это то же самое, как делать 0['result'], который не имеет смысла, так как числа не поддерживает выборку по [], технический термин, который __getitem__.

Необходимо выполнить команду subprocess.check_output; который возвращает результат как строку.

Тогда у вас есть еще одна второстепенная проблема, которая вам нужна для получения словаря по полученному анализу json, а не output.

Короче говоря, вам нужно:

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

большое спасибо, теперь он отлично работает! – tafazzi87

Смежные вопросы