代码之家  ›  专栏  ›  技术社区  ›  tafazzi87

解析json输出python时出现类型错误

  •  0
  • tafazzi87  · 技术社区  · 9 年前

    我试图解析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'])
    

    为什么我不能访问任何字段?也许我无法解析这种类型的子流程输出?

    1 回复  |  直到 9 年前
        1
  •  4
  •   Burhan Khalid    9 年前

    问题是 subprocess.call 返回 执行情况;如果出现错误,则为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@email.com"',shell=True)
    values = json.loads(str(output))
    print (values['result']) # note values, not output
    
    推荐文章