2016-07-07 91 views
0

我试图解析json的一些字段,这是命令行的输出。但我不能进入任何领域,我总是这个错误:在解析json输出时输入错误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 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