首页 > 解决方案 > TypeError:字符串索引必须是通过嵌套字典迭代的整数

问题描述

我正在尝试从 json api 响应中提取一些配置信息。它确实循环通过父键,但不会检索嵌套在它们下面的值。

我已经尝试通过它迭​​代

JSON 响应如下所示:

{
    "Id": null,
    "result": {
        "methodName": {
            "config_1": {
                "x": "asdf",
                "y": "sdfg"
            }
            "config_2": {
                "1": {
                    "a": "qwer",
                    "b": "wert",
                    "c": {
                        "x": "xxxx",
                        "y": "zzzz"
                }
                "2": {
                    "a": "qwer",
                    "b": "wert",
                    "c": {
                        "x": "xxxx",
                        "y": "zzzz"
                }
            }
        }
    }
}

我的代码如下所示:

def get_hardware_config(*args):

    my_url = f"""<url>"""

    try:
        print(f"Retrieving configuration information for hardware")
        api_method = f"<methodName>"
        out = api_get(
            my_url=my_url, name=api_method, my_user=<username>, my_pass=<password>
        )
        for item in out["result"]["methodName"]["config_2"]:
            config_id = item
            print(f"{config_id}")
            serial = item["b"]
            print(f"{identification}")
            chassis_type = item["c"]["x"]
            print(f"{chassis_type}")
            model = item["c"]["y"]
            print(f"{model}")

    except (SystemExit, KeyboardInterrupt):
        raise
    except Exception as e:
        logger.exception(f"Exception occured")
        return []

get_hardware_config(hardware_name, ip)

如果我只打印出项目,它工作正常

1
2

但是当我深入到项目下方时,它会得到

Traceback (most recent call last):
  File "./my_script.py", line 160, in get_hardware_config
    serial = item["b"]
TypeError: string indices must be integers

请帮忙

标签: pythonjsonpython-3.x

解决方案


在您的循环中,item只是字典键,即"1"or "2"

但是你真正想要的是那个键的。尝试这个:

for config_id in out["result"]["methodName"]["config_2"]:
    item = out["result"]["methodName"]["config_2"][config_id]
    serial = item["b"]

推荐阅读