我正在尝试使用JSON文件中的列表中的字典。数据导入正常,读起来很好。对于我的生活,我无法弄清楚如何打印出“member_id”键。我只想打印“member_id”号码列表。我最初使用json.loads,然后切换到json.dumps。任何帮助都会非常感激。
import urllib2
import json
nyt_api_key = '72c9a68bbc504e91a3919efda17ae621%3A7%3A70586819'
url= 'http://api.nytimes.com/svc/politics/v3/us/legislative/congress/113'
json_obj = urllib2.urlopen(url)
data = json.load(json_obj)
data2 = json.dumps(data, sort_keys=True, indent=True, skipkeys = True)
print data2
print data2
的输出:(列表会一直打开,因此会被截断。列表底部有一个结束括号。所以它是列表中的字典。)
"positions": [
{
"dw_nominate": "0.466",
"member_id": "A000055",
"vote_position": "Yes"
},
{
"dw_nominate": "0.995",
"member_id": "A000367",
"vote_position": "Yes"
},
{
"dw_nominate": "0.666",
"member_id": "A000369",
"vote_position": "Yes"
},
来自print data2['member_id']
的输出,如果使用'position','vote_position'等输出相同:
Traceback (most recent call last):
File "/Users/Owner/PycharmProjects/untitled2/1", line 9, in <module>
print data2["positions"]
TypeError: string indices must be integers, not str
print data
的输出:
u'positions': [{u'dw_nominate': u'0.466', u'vote_position': u'Yes', u'member_id': u'A000055'}, {u'dw_nominate': u'0.995', u'vote_position': u'Yes', u'member_id': u'A000367'}, {u'dw_nominate': u'0.666', u'vote_position': u'Yes', u'member_id': u'A000369'}
print data['positions']
的输出:
print data["positions"]
KeyError: 'positions'
print.data(keys)
的输出:
[u'status', u'results', u'copyright']
Process finished with exit code 0
答案 0 :(得分:1)
data2
是一个字符串值,它没有键。我想你要打印的是data["positions"]
这是数据的奇怪输出,你甚至没有括号。尝试打印type(data)
,它应该是dict
答案 1 :(得分:1)
我只想打印“member_id”号码列表。
因此,您需要循环遍历positions
并访问每个字典中的member_id
:
data ={"positions": [
{
"dw_nominate": "0.466",
"member_id": "A000055",
"vote_position": "Yes"
},
{
"dw_nominate": "0.995",
"member_id": "A000367",
"vote_position": "Yes"
},
{
"dw_nominate": "0.666",
"member_id": "A000369",
"vote_position": "Yes"
}]}
print([d["member_id"] for d in data["results"]["positions"]])
['A000055', 'A000367', 'A000369']
如果查看API documentation,可以看到每个json响应的示例。
答案 2 :(得分:0)
所以我应该在Python中将此标题更改为Scrapping JSON for XML。我确信不是其他所有人都会遇到与JSON相同的问题,但经过许多令人沮丧的时间后,我决定沿着#2路径...... xml版本。 xml版本更容易在门外工作。在大约1/10的时间里,我得到了我想要的东西。
from urllib2 import urlopen
from xml.dom import minidom
feed = urlopen("http://api.nytimes.com/svc/politics/v3/us/legislative.xml?
doc = minidom.parse(feed)
id_element = doc.getElementsByTagName("member_id")
id_number0 = id_element[0].childNodes[0].nodeValue #just a sample
id_number1 = id_element[1].childNodes[0].nodeValue #just a sample
id_number2 = id_element[2].childNodes[0].nodeValue #just a sample
print len(id_element) #to see how many items were in the variable
count = 0
for item in id_element:
print id_element[count].childNodes[0].nodeValue
count = count + 1
if count == 434:
break
这绝对不是最干净的循环。我还在努力。但是代码解决了我最初发布的问题。 API密钥不是实际密钥,答案窗口中的格式化将其丢弃,因此我只删除了一堆密码。您可以在NYT开发者网站上找到API。
感谢所有发帖的人。