解析JSON TypeError:字符串索引必须是整数

2024-04-30 07:06:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要检索GoDaddy证书的名称和过期日期。我正在尝试这样的代码:

def get_cert():
    customerId = "UUID"
    cert_url = "https://api.godaddy.com//v2/customers/%s/certificates" %(customerId)

    cert_response = requests.get(cert_url, headers=headers)
    cert_dict = json.loads(cert_response.text)
    for cert in cert_dict:
        cert_name = (cert['commonName'])
        print(cert_name)

并得到如下错误:

    cert_name = (cert['commonName'])
TypeError: string indices must be integers

未经分析的API调用的输出:

        {
            "certificateId": "ID", 
            "commonName": "*.domain.co.uk", 
            "completedAt": "2021-01-12T14:26:36Z", 
            "createdAt": "2020-04-02T14:25:06Z", 
            "period": 1, 
            "serialNumber": "NUMBER", 
            "status": "CURRENT", 
            "type": "DV_WILDCARD_SSL", 
            "validEndAt": "2022-05-04T14:26:32Z", 
            "validStartAt": "2021-04-02T14:26:32Z"
        }

我为GoDaddy domains API编写了相同的代码,它工作正常(逻辑相同,只是API URL和键不同),所以我不明白为什么在这种情况下禁止使用“commonName”和“validEndAt”来剪切json输出


Tags: 代码nameapijsonurlgetcertresponse
1条回答
网友
1楼 · 发布于 2024-04-30 07:06:12

确保您接收到的是您假设的数据类型。如果解码产生一个包含dict对象的list实例,那么您拥有的代码是合适的。您收到的错误消息似乎是一个dict

当您遍历dict时,您将收到它的所有键。如果您确切地知道您想要什么密钥,就不需要对其进行迭代

def get_cert():
    customerId = "UUID"
    cert_url = "https://api.godaddy.com//v2/customers/%s/certificates" %(customerId)

    cert_response = requests.get(cert_url, headers=headers)
    cert_dict = json.loads(cert_response.text)
    print(cert_dict['commonName'])

如果密钥不存在,这将引发错误。另一种尝试在没有任何异常的情况下检索它的方法是:

common_name = cert_dict.get('commonName')

如果密钥不在那里,common_name将是None

相关问题 更多 >