解析嵌套的JSON响应 - Python

5

我整个周末都卡在这里了,有人能帮帮我吗?

我试图解析嵌套的JSON响应。我似乎无法返回我需要的值,每当我尝试解析它时就会出现“字符串索引必须是整数”的错误...

我想要实现的是:对于JSON中的每个对象,提取其中的available_projects,然后从中提取available_models。例如,第一个应该是:model001,model_20171004-090552。

示例JSON响应:

{
    "available_projects": {
        "model001": {
            "available_models": [
                "model_20171004-090552"
            ],
            "status": "ready"
        },
        "model002": {
            "available_models": [
                "model_20171013-143108"
            ],
            "status": "ready"
        },
        "model002b": {
            "available_models": [
                "model_20171013-151458"
            ],
            "status": "ready"
        }
}

我的代码:

myText = requests.get('http://localhost:5000/status')
jsonresponse = json.loads(myText.text)


for element in jsonresponse[u'available_projects']:
    for AM in element[u'available_models']: ## this gives me the errors..
        print AM

如果我只是执行“for element in jsonresponse [u'available_projects']:print element”语句,它可以正确地打印出 available_projects 列表。我如何使用该输出进入 JSON 的下一级?
任何帮助或代码片段都将是惊人的 - 谢谢!

当你执行 for element in jsonresponse[u'available_projects']: 时,你正在迭代字典的 _键_(即 element 是一个字符串)。相反,你应该迭代字典的 _值_。 - Aran-Fey
1个回答

6
你可以使用字典对象中的keys方法来获取键,然后迭代获取所需的值。 示例:
d = {
    "available_projects": {
        "model001": {
            "available_models": [
                "model_20171004-090552"
            ],
            "status": "ready"
        },
        "model002": {
            "available_models": [
                "model_20171013-143108"
            ],
            "status": "ready"
        },
        "model002b": {
            "available_models": [
                "model_20171013-151458"
            ],
            "status": "ready"
        }
    }
}

for i in d["available_projects"].keys():
    print i, "=" , d["available_projects"][i]['available_models'][0]

输出:

model001 = model_20171004-090552
model002b = model_20171013-151458
model002 = model_20171013-143108

Rakesh!你真是个传奇 :) 这很完美地解决了问题 - 非常感谢。我一直在为这个问题烦恼 :) - Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接