Ich brauche einige Daten von der Meetup API, konvertieren Sie die JSON ich in eine CSV, alles in Python 3. Ich habe noch nie mit JSON oder Python gearbeitet, so dass ich ' Ich bin auf einige Probleme gestoßen. Das Abrufen der Daten ist kein Problem, aber ich kann das JSON-Objekt nicht als richtige CSV-Datei analysieren. Mein Code, anonymisiert:Konvertieren von JSON in CSV mit Python 3
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()
Nun, wie Sie sehen können, schreibe ich in die CSV als Liste. Dies führt zu einer wirklich hässlichen Ausgang, wie folgt aussehen (auch hier werden die Werte in den Kappen anonymisierten):
{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}
Also im Grunde das ganze JSON-Objekt in einem einzigen CSV Feld, mit seltsamen ‚u ist, in Listen und bald. Wenn ich es jedoch nicht als Liste schreibe, erhalte ich nur die Felder des JSON-Objekts ohne die Daten, also wären es nur 'Organisatoren', 'Name' usw., ohne den eigentlichen Namen. Wie gesagt, ich bin ein Python-Anfänger und habe keine Bibliotheken gefunden, die mir dabei helfen könnten, aber ich bin mir sicher, dass sie existieren. Jede Hilfe wird wirklich geschätzt, und es wäre großartig, wenn es Python3-kompatibel wäre.
Bearbeiten: Wie ich es am Ende aussehen möchte: Ich bekomme mehrere Meetup-Gruppen in der Antwort, die alle die gleiche Struktur wie oben gezeigt haben. Daher sollte die Beschreibung des Wertes nur einmal aufgeführt werden, als Header und die Werte unter (neue Leitungen und Rohre ein neues Feld der csv-Blatt angibt) aufgeführt:
RSVPs_per_event | Organizer | ID
5 | Tom | 1
20 | Jack | 2
35 | Anne | 3
JSON eine stark verschachtelte Struktur haben kann, kann eine CSV nicht leicht, dass darstellen. Ich habe Ihre Antwort über [jsonlint] (https://jsonlint.com/) ausgeführt (was, obwohl dies tatsächlich ein Wörterbuch ist, ein lesbares Format ergibt) und da sind ziemlich viele Informationen drin. Sie müssen Ihre erwartete Ausgabe zeigen – roganjosh
Im Idealfall, da alle JSON-Objekte in meiner Antwort die gleiche Struktur haben, wäre es toll, die Beschreibung des Werts, wie 'Organizer', nur einmal in einer Kopfzeile und dann die Werte jedes darunter aufgeführten Objekts. – alena
So etwas wie: ** Organizer ** | Tom | Jack usw., aber untereinander, anstatt nebeneinander (kann nicht die Formatierung in einer Antwort tun) – alena