Daten auswerten aus String

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
M4rcde
User
Beiträge: 16
Registriert: Sonntag 21. September 2014, 19:36

Hallo Python-profis!

Ich bin relativ neu in Python, finde die Sprache ansich aber genial. Habe schon mit GPIO herumgespielt, aber möchte nun etwas mehr dazulernen.
Von einer API bekomme ich nach einer Anfrage einen Datensatz zurück:
{
"data": [
{
"name": "abc",
"id": "123"
},
{
"name": "def",
"id": "456"
},
{
"name": "ghi",
"id": "789"
}
]}

Habe die Daten aufgrund von Datenschutz und zur Vereinfachung verändert. Nun, dieser Text ist in einer Variable gespeichert und kann auch ausgegeben werden. Allerdings enthält er nicht nur 3 sondern einige hundert Datensätze.
1. Wie bekomme ich heraus wieviele Datensätze ich zurückbekommen habe? In diesem Fall sind es 3... Dachte schon an die Möglichkeit das Wort "id" zu zählen.
2. Wie kann ich jede einzelne ID in eine Variable speichern (ist schon lange her dass ich soetwas gemacht habe). Gab da mal in PHP foreach odersowas...

Mir reichen simple Links oder Namen der Funktionen aus :) Ich google dann selbst weiter! Aber derzeit bin ich etwas überrumpelt von den vielen verschiendenen Lösungswegen die mir Google bietet.



Ich danke euch im vorraus für jede Hilfe!

Marc
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Ist das nicht Json?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
M4rcde
User
Beiträge: 16
Registriert: Sonntag 21. September 2014, 19:36

darktrym hat geschrieben:Ist das nicht Json?
Alles klar danke! Also json kann wohl encodieren und dekodieren! Habe nun aber lange gesucht und nicht gefunden wie ich jede id einzeln "auslesen und verarbeiten" kann... json verändert wohl nur die Struktur oderso... Kannst du mir da auch etwas genauer helfen?

UPDATE:

Code: Alles auswählen

for id in finduser.values():
    print id
finduser ist die Variable inder sich alle Datensätze befinden (so wie sie oben stehen). Und das print id sollte die id ausgeben...
So habe ich es hier entnommen: http://scribu.net/blog/python-equivalen ... reach.html
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Hey du wolltest doch selbst weiter googeln ;)

Spass :)

Willkommen im Forum!

Fuer JSON gibt es das json Modul.
Und solltest du das ganze ueber eine Anfrage generieren, interessiert dich vielleicht das `requests` Modul, das eine JSON Antwort direkt verarbeiten kann:

Code: Alles auswählen

In [1]: import requests

In [2]: r = requests.get('https://github.com/timeline.json')

In [3]: r.json
Out[3]: 
{u'documentation_url': u'https://developer.github.com/v3/activity/events/#list-public-events',
 u'message': u"Hello there, wayfaring stranger. If you're reading this then you probably didn't see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead."}
In jedem Fall bekommst du ein Dictionary zurueck.
M4rcde
User
Beiträge: 16
Registriert: Sonntag 21. September 2014, 19:36

Also, json war der absolut falscheste Ansatz :D
Ist angeblich eine stinknormale Python Datenübergabe und das was ich machen wollte wird mit diesem Code erledigt:

Code: Alles auswählen

for photo in response['data']:
        print photo['source']
vll kann ich damit ja anderen helfen :) Danke trotzdem für die JSON ansätze! Auch etwas sehr interessantes!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Da es keine "stinknormale Python Datenuebergabe" gibt, hast du dir die JSON Antworten selbst zuzuschreiben. Schliesslich hast du von einer Textform gesprochen ;)
Was du da hast ist ein Dictionary und das faellt ueblicherweise auch aus JSON heraus ;)
M4rcde
User
Beiträge: 16
Registriert: Sonntag 21. September 2014, 19:36

Gut zu wissen :) Danke
Antworten