如何在python中迭代json数据?

时间:2014-03-14 06:05:24

标签: json python-2.7

我有一个如下所示的json输出,

{
"took":3,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},
"hits":{"total":2,"max_score":1.0,
"hits":
 [
 {
     "_index":"management",
     "_type":"",
     "_id":"/home/myfld1/myid1",
     "_score":1.0,  
     "_source" : 
     {
         "newslides": "User Mgmt1  ", 
         "metaData": 
         {
             "fileName": "file1", 
         }
     }
   },
   {
       "_index":"management",
       "_type":"",
       "_id":"/home/myfld3/myid3",
       "_score":1.0,
       "_source" : 
       {
           "newslides": "User mgmt2  ", 
           "metaData":
           {
               "fileName": "file2", 
           }
       }
   }
]
}
}

我正在尝试获取" fileName"从上面的json字段。我试过这样的,

    for filenames in response["hits"]["hits"][0]["_source"]["newslides"]["metaData"]:
        filearray.append(filenames["fileName"])

但我收到的错误如下,

for filenames in response["hits"]["hits"][0]["_source"]["newslides"]["metaData"]:
TypeError: string indices must be integers

请帮助我获取该文件名。

1 个答案:

答案 0 :(得分:0)

它只是一个包含一些列表和其他词典的字典。请小心并迭代地浏览元素:

filearray = []
for x in response["hits"]["hits"]:
    filearray.append(x["_source"]["metaData"]["fileName"])

或一行:

filearray = [x["_source"]["metaData"]["fileName"] for x in response["hits"]["hits"]]