2016-07-07 89 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