尝试使用Python通过API访问数据时出错

尝试使用Python通过API访问数据时出错,python,json,rest,api,Python,Json,Rest,Api,尝试使用API访问有关服务器存储的详细信息时出错。我想提取json中状态为state的备份状态: { "storage": { "access": "private", "backup_rule": {}, "backups": { "backup": [] }, "license": 0, "part_of_plan": "", "servers": { "server

尝试使用API访问有关服务器存储的详细信息时出错。我想提取json中状态为state的备份状态:

{
   "storage": {
      "access": "private",
      "backup_rule": {},
      "backups": {
         "backup": []
      },
      "license": 0,
      "part_of_plan": "",
      "servers": {
         "server": [
            ""
         ]
      },
      "size": ,
      "state": "online",
      "tier": "",
      "title": "",
      "type": "",
      "uuid": "",
      "zone": ""
   }
}
当我执行此代码时:

bkpdet = requests.get('https://fffff.com/1.2/storage/08475', auth=HTTPBasicAuth('login', 'pass'))
bkpdet_json = bkpdet.json()
datastg = bkpdet.json()
print(datastg)
for sts in datastg['storage']:
    bkpsts = sts['state']
    print(bkpsts)
if bkpsts == "online":
    print('Backup has been created.')
else bkpsts == "backuping":
    print('Backup creation is in progress.')
else:
    print(bkpdet.status_code)
我得到这个错误:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: string indices must be integers
我正在搜索,但仍然无法找到此处的错误。

当您使用:

for sts in datastg['storage']:
sts
将是一个字符串键。你试图把它当作一本字典

如果您只需要
状态
值,可以直接访问它:

datastg['storage']['state']
如果要迭代
storage
下的所有键值对,可以对键和值使用
items()

for key, value in datastg['storage'].items():
    print(key,":", value)
下面的代码有效

data = {
    "storage": {
        "access": "private",
        "backup_rule": {},
        "backups": {
            "backup": []
        },
        "license": 0,
        "part_of_plan": "",
        "servers": {
            "server": [
                ""
            ]
        },
        "size": 1,
        "state": "online",
        "tier": "",
        "title": "",
        "type": "",
        "uuid": "",
        "zone": ""
    }
}

state = data['storage']['state']
print(state)
输出

online

正如@MarkMeyer建议的那样,我更改了如下代码:

bkpdet = requests.get('https://fffff.com/1.2/storage/08475', auth=HTTPBasicAuth('login', 'pass'))
bkpdet_json = bkpdet.json()
datastg = bkpdet.json()
bkpsts = datastg['storage']['state']
print(bkpsts)

它工作得很好

它对我不起作用,我得到一个错误:
>>state=data['storage']['state']Traceback(最近一次调用):File“”,第1行,在key错误中:'storage'>>>打印(state)Traceback(最近一次调用):File“”,在name错误中:name'state'未定义