【问题标题】:Parsing nested JSON response Python [duplicate]解析嵌套的JSON响应Python [重复]
【发布时间】:2018-07-15 05:02:37
【问题描述】:

我整个周末都被困在这个问题上,有人可以帮帮我吗?

我正在尝试解析嵌套的 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 进行更深入的研究?

任何帮助或代码 sn-p 都会很棒 - 谢谢!!

【问题讨论】:

  • 当您执行 for element in jsonresponse[u'available_projects']: 时,您正在迭代字典的 keys(即 element 是一个字符串)。你想迭代字典的 values

标签: python json parsing nested


【解决方案1】:

您可以使用字典对象中的 keys method 来获取键,然后迭代以获取所需的值。

示例:

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

【讨论】:

  • 拉克什!你的传奇 :) 效果很好 - 非常感谢。我一直在扯头发试图让它发挥作用:)
猜你喜欢
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 2016-09-03
  • 2023-03-20
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多