decodificando el diccionario json con python

Tengo un script escrito para obtener datos de una API y devolverlo, pero ahora necesito analizar esos datos, este es un ejemplo de cómo se ven los datos json, con algunos de los valores del diccionario que busco.

{'results': [{'icpsr_id': 21133, 'twitter_id': 'RepToddYoung', 'thomas_id': '02019', 'term_end': '2017-01-03', 'office': '1007 Longworth House Office Building', 'gender': 'M', 'phone': '202-225-5315', 

Este es el código que escribí para extraer y analizar el archivo de datos json. ¿Alguien podría decirme qué tiene de malo? todavía estoy devolviendo el valor completo del diccionario de ‘resultados’, lo que significa que es como que el código no ha hecho nada, todavía obtengo el diccionario completo, no se analiza en lugar de SOLO el ‘twitter_id’ y la ‘oficina’

 import requests import json def call(): payload = {'apikey':'my_apikey', 'zip':'74120'} bas_url = 'http://openstates.org/api/v1//legislators/?state=ok' r = requests.get(bas_url, params = payload) grab = r.json() return grab jsonResponse=json.loads(decoded_response) jsonData = jsonResponse["results"] for item in jsonData: chamber = item.get("twitter_id") last_name = item.get("office") 

Parece que quieres algo como esto:

 def call(): payload = {'apikey':'my_apikey', 'zip':'74120'} bas_url = 'http://openstates.org/api/v1//legislators/?state=ok' r = requests.get(bas_url, params = payload) grab = r.json() jsonData = grab["results"] return [{key: value for key, value in result.items() if key in ("twitter_id", "office")} for result in jsonData] 

Bien, mirando los documentos en línea para el módulo de solicitudes, veo que llamar a r.json() hará el análisis JSON por ti y te devolverá un dictado de Python. Lo que está publicando es el resultado de ese dictado, por lo que la parte JSON ya se ha ocupado de usted.

Este código debería funcionar tanto en Python 2 como en Python 3, una vez que haya extraído los datos a json_response utilizando json_response = r.json() :

 extracted_values = [] json_data = json_response['results'] for item in json_data: subitem_dict = {} for key in 'twitter_id office'.split(): subitem_dict[key] = item.get(key) # will give None if key does not exist extracted_values.append(subitem_dict) print(extracted_values) 

huellas dactilares:

 [{'twitter_id': 'RepToddYoung', 'office': '1007 Longworth House Office Building'}, {'twitter_id': 'SenDonnelly', 'office': '720 Hart Senate Office Building'}, {'twitter_id': 'SenDanCoats', 'office': '493 Russell Senate Office Building'}]