解析 json 输出时出现类型错误 python
type error while parsing json output python
我正在尝试解析 json 的某些字段,这是命令行的输出。但我无法访问任何字段,我总是出现此错误:
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.it",
"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@email.com"',shell=True)
values = json.loads(str(output))
print (values['result'])
为什么我无法访问任何字段?也许我无法解析这种类型的子进程输出?
谢谢大家
问题是subprocess.call
returns执行的resultcode;如果出现错误情况,则为 0(如果成功)或任何其他正整数。
现在,当您执行 output['result']
时,它与执行 0['result']
相同,这没有意义,因为数字不支持通过技术术语 []
获取因为那是 __getitem__
.
您需要执行subprocess.check_output
; returns 输出为字符串。
然后你有另一个小问题,你需要在解析的结果 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@email.com"',shell=True)
values = json.loads(str(output))
print (values['result']) # note values, not output
我正在尝试解析 json 的某些字段,这是命令行的输出。但我无法访问任何字段,我总是出现此错误:
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.it",
"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@email.com"',shell=True)
values = json.loads(str(output))
print (values['result'])
为什么我无法访问任何字段?也许我无法解析这种类型的子进程输出?
谢谢大家
问题是subprocess.call
returns执行的resultcode;如果出现错误情况,则为 0(如果成功)或任何其他正整数。
现在,当您执行 output['result']
时,它与执行 0['result']
相同,这没有意义,因为数字不支持通过技术术语 []
获取因为那是 __getitem__
.
您需要执行subprocess.check_output
; returns 输出为字符串。
然后你有另一个小问题,你需要在解析的结果 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@email.com"',shell=True)
values = json.loads(str(output))
print (values['result']) # note values, not output