从JSON中提取数据

时间:2016-06-16 17:40:40

标签: python json

我有一个通过REST API返回的大型JSON项目,我不会将其与全文混淆,但这里是我目前正在使用的代码:

import urllib2
import json
req =     urllib2.Request
('http://elections.huffingtonpost.com/
pollster/api/polls.json?state=IA')
response = urllib2.urlopen(req)
the_page = response.read()
decode = json.loads(the_page)
#print = decode #removed, because it is not actually related to the question
print decode

我一直试图从中提取信息,例如日期调查更新,民意调查中的实际数据等(特别是总统民意调查),但我无法返回任何数据。有人可以帮忙吗?

编辑: 实际问题是如何从返回的数组/字典中查询数据

2 个答案:

答案 0 :(得分:2)

问题是,您用数据覆盖print,而不是打印数据。只需删除最后一行中的=,它应该可以正常工作:

print decode

如果要使用Python 3,则需要print的括号。这看起来像这样:

print(decode)

编辑:当您更新问题时,这里是您实际问题的答案:数据由loads函数作为词组和列表的组合返回。因此,您还可以像dict / list一样访问数据。例如,要在一个列表中获取所有民意调查的last_updated字段,您可以执行以下操作:

all_last_updated = [poll['last_updated'] for poll in decode]

或者只是获得由宪法责任项目"赞助的所有民意调查的结束日期,您可以这样做:

end_dates = [poll['end_date'] for poll in decode if any(sponsor['name'] == 'Constitutional Responsibility Project' for sponsor in poll['sponsors'])]

或者,如果您只想要列表中第一个民意调查的ID,请执行:

the_id = decode[0]['id']

您可以通过类似的方式从json访问任何内容。

答案 1 :(得分:0)

这是因为你做了

print = decode

相反,如果您使用的是python 2,请执行

print decode

或在python 3中做

print(decode)