Skip to main content
 首页 » 编程设计

python之如何在 Python 中循环遍历 JSON

2025年05月04日14emanlee

我不知道如何遍历比 1 层更深的 JSON 对象。对象是:

{ 
  "data":[ 
    { 
      "id":"251228454889939/insights/page_fan_adds_unique/day", 
      "name":"page_fan_adds_unique", 
      "period":"day", 
      "values":[ 
        { 
          "value":9, 
          "end_time":"2012-05-29T07:00:00+0000" 
        }, 
        { 
          "value":5, 
          "end_time":"2012-05-30T07:00:00+0000" 
        } 
      ], 
      "title":"Daily New Likes", 
      "description":"Daily The number of new people who have liked your Page (Unique Users)" 
    }, 
    { 
      "id":"251228454889939/insights/page_fan_adds/day", 
      "name":"page_fan_adds", 
      "period":"day", 
      "values":[ 
        { 
          "value":9, 
          "end_time":"2012-05-29T07:00:00+0000" 
        }, 
        { 
          "value":5, 
          "end_time":"2012-05-30T07:00:00+0000" 
        } 
      ], 
      "title":"Daily New Likes", 
      "description":"Daily The number of new people who have liked your Page (Total Count)" 
    } 
  ] 
} 

代码:

def parseJsonData(data): 
    output_json = json.loads(data) 
    for i in output_json: 
        print i 
        for k in output_json[i]: 
            print k 

为什么我无法访问像这样的对象:output_json[data][id]? 如果我尝试这样做,我会收到错误消息:

string indice must be an integer

请您参考如下方法:

由于您的“data”键实际上是一个对象列表,您不能直接通过“id”字段访问这些项目。您需要通过列表索引访问每个项目,例如:
output_json["data"][0]["id"]

现在,如果你想做的是能够通过“id”字段作为键索引“data”的成员,你可以重新格式化你的数据:

# make "data" a dict {id: item, }, instead of list [item1, item2, ...] 
output_json['data'] = dict((item['id'], item) for item in json_data['data']) 
 
print output_json['data'] 
# {'251228454889939/insights/page_fan_adds_unique/day': ... 
 
print output_json['data']['251228454889939/insights/page_fan_adds_unique/day'] 
# {'description': 'Daily The number of new p ... 
 
# ways to loop over "data" 
for id_, item in output_json['data'].iteritems(): 
    print id_, item 
 
for item in output_json['data'].itervalues(): 
    print item 

否则你所要做的只是遍历“数据”,因为索引和对象之间没有真正的相关性:

for item in output_json["data"]: 
    print item['id'] 
 
# 251228454889939/insights/page_fan_adds_unique/day 
# 251228454889939/insights/page_fan_adds/day