2016-05-03 43 views
-1

我有一个从api中提取json数据的脚本,我希望它在提取所述数据后解码并选择要存储的标记一个分贝。现在我只需要让脚本返回特定的值即可。这是脚本看起来像,之前我试图解码它。如何从json数据库中提取特定节点并返回它的值

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 

这就是我被告知,试图让那些特定的标记返回

return [{key: value for key, value in result.items() if key in ("twitter_id", "office")} for result in jsonData] 

,但返回的错误。有什么建议么?

'results':[{'twitter_id':'RepToddYoung','ocd_id':'ocd-division/country:us/state:in/cd:9','oc_email':'[email protected] 'org','middle_name':'C.','votesmart_id':120345,'first_name':'Todd','youtube_id':'RepToddYoung','last_name':'Young','bioguide_id':'Y000064' ,'区':9,'昵称':无,'office':'1007 Longworth House Office Building','term_start':'2015-01-06','thomas_id':'02019','派对':' R','in_office':True,'title':'Rep','govtrack_id':'412428','crp_id':'N00030670','term_end':'2017-01-03','chamber' 'state_name':'Indiana','fax':'202-226-6866','phone':'202-225-5315','gender':'M','fec_ids':['H0IN09070 '','国家':'IN','网站':'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':'[email protected]','middle_name ':None,'lis_id':'S356','first_name':'Joe','youtube_id':'sendonnelly','last_name':'Donnelly','bioguide_id':'D000607','区' '昵称':无,'办公室':'720哈特参议院办公楼','state_rank':'junior','thomas_id':'01850','term_start':'2013-01-03','派对': 'D','in_office':True,'title':'Sen','govtrack_id':'412205','crp_id':'N00026586','term_end':'2019-01-03','chamber': '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 /国家/地区:us/state:in','oc_email':'[email protected]','middle_name':'Ray','lis_id':'S212','first_name':'Daniel','youtube_id' :'SenatorCoats','last_name':'外套','bioguide_id':'C000542','区':无,'昵称':无,'办公室':'493罗素参议院办公楼','state_rank':' ''''''''''''''''''''','''''','''''''','party':'R','in_office':True,'title':'Sen','govtrack_id' 402675','crp_id':'N00003845','term_end':'2017-01-03','chamber':'senate','state_name':'Indiana','传真':'202-228-1820' ,'phone':'202-224-5623','gender':'M','senate_class':3,'fec_ids':['S0IN00053'],'state':'IN','votesmart_id':53291 ,'网站':'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'}] }

+0

发布已解码JSON的示例。(即,将'print(grab)'添加到您的程序中并将其样本复制粘贴到您的问题中。) –

+0

请停止一次又一次发布相同的问题。如果你不停下来,就会采取行动。这是为了你自己的利益。 –

回答

0

我是顾看你的json看起来像你发布的东西[{}, {}, {}]。即grab是一个python的字典列表。

试试这个吗?

get_nodes = lambda x : {"twitter_id" : x.get("twitter_id", None), 
    "office" : x.get("office", None)} 

def call(): 
    ... whatever you had before ... 
    return map(get_nodes, grab) 

此外,如果你想让你的原始答案工作,你需要添加一个“其他”值。在将来,我会建议发布你得到的错误,而不是仅仅说“这个错误”。

+0

文件 “”,第1行,在 文件 “/home/brad/Documents/congress.py”,第10行,在呼叫 抓斗= r.json() 文件 “”,线808,在JSON 返回complexjson.loads(self.text,** kwargs) 负载中的文件“”,第319行 return _default_decoder.decode(s) 解码中的文件“/ y”,第339行 obj,end = self。 raw_decode(s,idx = _w(s,0).end()) 文件“/usr/lib/python3.5/json/decoder.py”,第357行,在raw_decode中 引发JSONDecodeError(“Expecting value”, s,err.value)from无 json.decoder.JSONDecodeError:期望值:第1行第1列(char 0) –

+0

任何资源rce对我了解这种情况将不胜感激 –

+0

您的代码崩溃在'r.json()'。如果您在编辑过程中发布的数据样本是您正在获取的数据样本,那么它不是有效的json(最初缺少大括号)。你能发布'r.text'的确切输出吗? – Thtu