Convierte JSON a CSV con Python 3

Necesito obtener algunos datos de la API de Meetup, convertir el JSON que obtengo en un CSV, todo eso en Python 3. Nunca he trabajado con JSON o Python, por lo que me he encontrado con algunos problemas. Obtener los datos no es un problema, pero parece que no puedo analizar el objeto JSON en un archivo CSV adecuado. Mi código, anónimo:

import json import requests import csv def main(): # initialize variables output_file = 'result_meetup.csv' api_key = "YOUR_MEETUP_API_KEY" params = {'key': api_key} url_path = 'http://api.meetup.com/pro/:URLNAME/groups' # get data from API, parse to JSON data = requests.get(url_path, params=params) data_parsed = data.json() length_data = len(data_parsed) - 1 data_to_file = open(output_file, 'w') csv_writer = csv.writer(data_to_file) for i in range(0, length_data): meetup = data_parsed[i] csv_writer.writerow([meetup]) data_to_file.close() if __name__ == "__main__": main() 

Ahora, como puedes ver, escribo en el CSV como una lista. Esto lleva a una salida realmente fea, con este aspecto (de nuevo, los valores en mayúsculas son anónimos):

 {u'rsvps_per_event': 0.0, u'organizers': [{u'permission': u'organizer', u'name': u'NAME', u'member_id': ID}], u'repeat_rsvpers': 0, u'topics': [{u'lang': u'en_US', u'id': ID, u'urlkey': u'socialnetwork', u'name': u'Social Networking'}, {u'lang': u'en_US', u'id': ID, u'urlkey': u'education', u'name': u'Education'}, {u'lang': u'en_US', u'id': ID, u'urlkey': u'newtech', u'name': u'New Technology'}, {u'lang': u'en_US', u'id': ID, u'urlkey': u'business-referral-networking', u'name': u'Business Referral Networking'}], u'upcoming_events': 0, u'gender_female': 0.3499999940395355, u'pro_join_date': DATE, u'id': ID, u'category': [{u'shortname': u'career-business', u'sort_name': u'Career & Business', u'id': 2, u'name': u'Career & Business'}], u'city': u'CITY', u'member_count': 73, u'lon': LON, u'organizer_photo': {u'thumb_link': u'LINK.JPEG', u'base_url': u'URL', u'id': ID, u'type': u'member', u'photo_link': u'LINK.JPEG', u'highres_link': u'LINK.JPEG'}, u'average_age': 35.555599212646484, u'status': u'Active', u'description': u'DESCRIPTION' u'founded_date': DATE, lat': LAT, u'urlname': u'NAME', u'gender_male': 0.6000000238418579, u'name': u'NAME', u'country': u'Portugal', u'gender_unknown': 0.05000000074505806, u'past_events': 0, u'gender_other': 0.0, u'past_rsvps': 0} 

Básicamente, todo el objeto JSON en un solo campo CSV, con ‘u’ extraños, en listas y así sucesivamente. Sin embargo, si no lo escribo como una lista, solo obtengo los campos del objeto JSON, sin los datos, por lo que solo serían ‘Organizadores’, ‘Nombre’, etc., sin el nombre real. Como dije, soy un principiante de python y no he encontrado ninguna biblioteca que me ayude con eso, pero estoy seguro de que existen. Cualquier ayuda es realmente apreciada, y sería genial si fuera compatible con Python3.

Edición: cómo me gustaría que fuera al final: tengo varios grupos de Meetup en la respuesta, todos con la misma estructura que se muestra arriba. Por lo tanto, la descripción del valor debe aparecer solo una vez, como encabezado, y los valores que figuran a continuación (nuevas líneas y tuberías que indican un nuevo campo de una hoja csv):

 RSVPs_per_event | Organizer | ID 5 | Tom | 1 20 | Jack | 2 35 | Anne | 3 

Para convertir los datos json a csv , debe extraer las claves y escribirlas en el encabezado y luego trabajar en los valores. Esto podría ayudarte:

 data_parsed = json.loads(Data) header = data_parsed[0].keys() csv_writer.writerow(header) for i in range(0,length_data) meetup = data_parsed[i].values() csv_writer.writerow([meetup]) 

Si alguien más tiene el mismo problema, lo resolví, no muy elegantemente, pero necesitaba los datos. El JSON estaba demasiado nested y complejo para analizar, por lo que ahora solo leo los campos que necesito de los datos.

 import json import requests import csv def main(): # initialize variables output_file = 'result_meetup.csv' api_key = "YOUR_API_KEY" params = {'key': api_key} url_path = 'http://api.meetup.com/pro/:URLNAME/groups' # get data from API, parse to JSON data = requests.get(url_path, params=params) data_parsed = data.json() length_data = len(data_parsed) - 1 data_to_file = open(output_file, 'w', newline='') csv_writer = csv.writer(data_to_file, delimiter=";") csv_writer.writerow(["id","name","city","country","member count","average age","founded_date","past_rsvps","rsvps_per_event","repeat_rsvpers","gender_unknown","gender_female","gender_male","gender_other"]) for i in range(0, length_data): meetup = data_parsed[i] id = meetup['id'] name = meetup['name'] city = meetup['city'] country = meetup['country'] member_count = meetup['member_count'] average_age = meetup['average_age'] founded_date = meetup['founded_date'] past_rsvps = meetup['past_rsvps'] rsvps_per_event = meetup['rsvps_per_event'] repeat_rsvpers = meetup['repeat_rsvpers'] gender_unknown = meetup['gender_unknown'] gender_female = meetup['gender_female'] gender_male = meetup['gender_male'] gender_other = meetup['gender_other'] csv_writer.writerow([id,name,city,country,member_count,average_age,founded_date,past_rsvps,rsvps_per_event,repeat_rsvpers,gender_unknown,gender_female,gender_male,gender_other]) data_to_file.close() if __name__ == "__main__": main()