Json Format mit Python zerlegen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
h0rnung
User
Beiträge: 46
Registriert: Mittwoch 28. Mai 2014, 11:41

Servus zusammen,

ich versuche immer noch eine DatenBank mit Tweets zu einem bestimmten Thema zu befuellen. Das lokale Speichern und das Streamen von Tweets funktioniert schon recht gut. Da ich nicht den gesamten Tweet brauche splitte ich diesen aktuell mit folgendem Code auf:

Code: Alles auswählen

twittertext = data.split(',"text":"')[1].split('","source')[0]
Da es sich bei den gestreamten Tweets um das Json Format handelt gibt es aber wohl eine wesentlich bessere und flexiblere Art die Information auszulesen.

Hier dargestellt seht ihr den fuer mich relevanten Tweet Teil:

{"created_at":"[…]",
"id":[…],
"id_str":"[…]",
"text":"[…]",
"source":"[…]",
"truncated":[…],
"in_reply_to_status_id":[…],
"in_reply_to_status_id_str":[…],
"in_reply_to_user_id":[…],
"in_reply_to_user_id_str":[…],
"in_reply_to_screen_name":[…],
"user":{"id":[…],
"id_str":"[…]",
"name":"[…]”,
"screen_name":"[…]",
"location":"[…]",
.....}
.....}

Angenommen ich wollte "text" und "user"."name" auslesen - wie muesste ich meinen oben gezeigten Code veraendern?

Ps: Die Json-Lib ist bereits installiert und per

Code: Alles auswählen

import json
aufrufbar.

Tausend Dank!!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo,
h0rnung hat geschrieben:Angenommen ich wollte "text" und "user"."name" auslesen - wie muesste ich meinen oben gezeigten Code veraendern?
Ps: Die Json-Lib ist bereits installiert und per

Code: Alles auswählen

import json
aufrufbar.
Dann schau doch mal in die Dokumentation des json-Moduls hinein, dort ist das Vorgehen sehr gut beschrieben. Selber zerlegen musst du da gar nichts. Wenn du die Daten als String vorliegen hast, dann sollte die loads-Funktion für dich interessant sein.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

JSON wird in Python mittels Dictionaries und Listen dargestellt. Du musst also nur via ``["key"]`` bzw. ``[index]`` auf diese Strukturen zugreifen. Eigentlich relativ einfach und Basiswissen :-)

Probiere das doch mal in einer Shell aus! ``json.loads`` ist Dein Freund, wenn Du nur das rohe JSON-Format hast.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
h0rnung
User
Beiträge: 46
Registriert: Mittwoch 28. Mai 2014, 11:41

heyho,

danke fuer die schnellen Antworten. Hab mir schon gedacht, dass das Basiswissen ist ... objektorientierte Porgrammierung ist nur leider ueberhaupt nicht meins :) ... eher xml und SQL. Sei's drum, ich hab es jetzt so probiert:

Code: Alles auswählen

jsonData = json.loads(data)
searchResults = jsonData['user']
for er in searchResults:
      created = er['created_at']
      text = er['text']
                print created
                print text
Da wirft er mir aber die Errormessage: IMPORTANT ERROR, string indices must be integers aus.

Wie vorgeschlagen schaue ich mir aber jetzt erstmal die Load-Funktion an.

Gruesse und Danke
Zuletzt geändert von Hyperion am Montag 2. Juni 2014, 11:00, insgesamt 1-mal geändert.
Grund: Code in Python-Code Tags gesetzt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

h0rnung hat geschrieben: danke fuer die schnellen Antworten. Hab mir schon gedacht, dass das Basiswissen ist ... objektorientierte Porgrammierung ist nur leider ueberhaupt nicht meins :) ...
Was hat das mit OOP zu tun? Alles was man braucht ist ein Funktionsaufruf und zwei einfache Operatoren...
h0rnung hat geschrieben: Da wirft er mir aber die Errormessage: IMPORTANT ERROR, string indices must be integers aus.
Du bist augenscheinlich schon in einem String und greifst dann aber via Schlüssel darauf zu, anstatt mit einem Index - so schwer ist das doch nicht ;-)

Daher ja meine Empfehlung mit einer Shell - da kannst Du gucken, was ``jsonData['user']`` wirklich beinhaltet!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
h0rnung
User
Beiträge: 46
Registriert: Mittwoch 28. Mai 2014, 11:41

servus,

abermals Danke fuer deine Bemuehungen.
Du bist augenscheinlich schon in einem String und greifst dann aber via Schlüssel darauf zu, anstatt mit einem Index - so schwer ist das doch nicht
Schwer ist es vermutlich nicht ... aber bei mir ist der Funke nicht uebergesprungen. Vielleicht hakt es auch schon an der Formulierung: Was ist ein Schluesse und was ein Index beim Json Format?

Gruesse
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

h0rnung hat geschrieben: Schwer ist es vermutlich nicht ... aber bei mir ist der Funke nicht uebergesprungen. Vielleicht hakt es auch schon an der Formulierung: Was ist ein Schluesse und was ein Index beim Json Format?
Vergiss, dass die Daten aus JSON kommen! Schlüssel (=key) und Indizes sind Bestandteile vom Arbeiten mit den beiden grundlegenden Datenstrukturen Dictionary und Listen in Python. Beides sind absolute Grundlagen - arbeite einfach das offizielle Tutorial durch, da werden beide behandelt. Dazu brauchst Du noch das Arbeiten in einer Python-Shell. Auch das wird iirc gleich zu Beginn behandelt.

``json.load`` bzw. ``json.loads`` liefert Dir eben eine in Python Semantik überführte Darstellung der JSON-Daten. Und das sind als Basis eben Listen und Dictionaries. Ergo muss man sich mit diesen beiden Datentypen auskennen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten