如何使用 python 访问 json 文件字典中的键值

How to access key values in a json files dictionaries with python

我有一个脚本可以从 api 中提取 json 数据,我希望它在提取所述数据后解码并选择要存储到数据库中的标签。现在我只需要让脚本达到 return 特定的调用值。这是脚本的样子,在我尝试对其进行解码之前。

import requests
def call():
payload = {'apikey':'945e8e8499474b7e8d2bc17d87191bce', 'zip' : '47120'}
bas_url = 'http://congress.api.sunlightfoundation.com/legislators/locate'
r = requests.get(bas_url, params = payload)
grab = r.json()
return grab

'results': [{'twitter_id': 'RepToddYoung', 'ocd_id': 'ocd-division/country:us/state:in/cd:9', 'oc_email': 'Rep.Toddyoung@opencongress.org', 'middle_name': 'C.', 'votesmart_id': 120345, 'first_name': 'Todd', 'youtube_id': 'RepToddYoung', 'last_name': 'Young', 'bioguide_id': 'Y000064', 'district': 9, 'nickname': None, 'office': '1007 Longworth House Office Building', 'term_start': '2015-01-06', 'thomas_id': '02019', 'party': 'R', 'in_office': True, 'title': 'Rep', 'govtrack_id': '412428', 'crp_id': 'N00030670', 'term_end': '2017-01-03', 'chamber': 'house', 'state_name': 'Indiana', 'fax': '202-226-6866', 'phone': '202-225-5315', 'gender': 'M', 'fec_ids': ['H0IN09070'], 'state': 'IN', 'website': 'http://toddyoung.house.gov', 'name_suffix': None, 'icpsr_id': 21133, 'facebook_id': '186203844738421', 'contact_form': 'https://toddyoungforms.house.gov/give-me-your-opinion', 'birthday': '1972-08-24'}, {'twitter_id': 'SenDonnelly', 'ocd_id': 'ocd-division/country:us/state:in', 'oc_email': 'Sen.Donnelly@opencongress.org', 'middle_name': None, 'lis_id': 'S356', 'first_name': 'Joe', 'youtube_id': 'sendonnelly', 'last_name': 'Donnelly', 'bioguide_id': 'D000607', 'district': None, 'nickname': None, 'office': '720 Hart Senate Office Building', 'state_rank': 'junior', 'thomas_id': '01850', 'term_start': '2013-01-03', 'party': 'D', 'in_office': True, 'title': 'Sen', 'govtrack_id': '412205', 'crp_id': 'N00026586', 'term_end': '2019-01-03', 'chamber': 'senate', 'state_name': 'Indiana', 'fax': '202-225-6798', 'phone': '202-224-4814', 'gender': 'M', 'senate_class': 1, 'fec_ids': ['H4IN02101', 'S2IN00091'], 'state': 'IN', 'votesmart_id': 34212, 'website': 'http://www.donnelly.senate.gov', 'name_suffix': None, 'icpsr_id': 20717, 'facebook_id': '168059529893610', 'contact_form': 'http://www.donnelly.senate.gov/contact/email-joe', 'birthday': '1955-09-28'}, {'twitter_id': 'SenDanCoats', 'ocd_id': 'ocd-division/country:us/state:in', 'oc_email': 'Sen.Coats@opencongress.org', 'middle_name': 'Ray', 'lis_id': 'S212', 'first_name': 'Daniel', 'youtube_id': 'SenatorCoats', 'last_name': 'Coats', 'bioguide_id': 'C000542', 'district': None, 'nickname': None, 'office': '493 Russell Senate Office Building', 'state_rank': 'senior', 'thomas_id': '00209', 'term_start': '2011-01-05', 'party': 'R', 'in_office': True, 'title': 'Sen', 'govtrack_id': '402675', 'crp_id': 'N00003845', 'term_end': '2017-01-03', 'chamber': 'senate', 'state_name': 'Indiana', 'fax': '202-228-1820', 'phone': '202-224-5623', 'gender': 'M', 'senate_class': 3, 'fec_ids': ['S0IN00053'], 'state': 'IN', 'votesmart_id': 53291, 'website': 'http://www.coats.senate.gov', 'name_suffix': None, 'icpsr_id': 14806, 'facebook_id': '180671148633644', 'contact_form': 'http://www.coats.senate.gov/contact/', 'birthday': '1943-05-16'}]}

那是 json 数据 returned,我想特别调用 IE {'twitter_id': 'RepToddYoung'}, or {'first_name': 'Todd'}

而不是我的脚本return它检索的整个json文件

查看您返回的数据结构。它是一个包含字典列表的字典。您可以使用 'results' 键访问列表:

l = r.json()['results']

从那里开始,包含您要查找的项目的字典是列表的第一项,因此:

d = l[0]

具体值可以从字典中检索:

print(d['twitter_id'])
print(d['first_name'])

您可以将其简化为:

r.json()['results'][0]['twitter_id']
r.json()['results'][0]['first_name']

您可能想要遍历列表:

for d in r.json()['results']:
    print('{first_name} {last_name}: {twitter_id}'.format(**d))

这将输出:

Todd Young: RepToddYoung
Joe Donnelly: SenDonnelly
Daniel Coats: SenDanCoats