API benutzen, dict auslesen

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
d4rkdr4g0n1
User
Beiträge: 8
Registriert: Montag 9. Februar 2015, 20:11

Hallo,

Ich habe ein kleines Problem beim auslesen eines JSON-Formats.
Konkret geht es um eine Wiener Linien API. Diese wird in einem JSON-Format ausgegeben die ich auslesen möchte. Dazu habe ich einen kleinen Code geschrieben.

Code: Alles auswählen

import urllib2
import simplejson

url = 'http://www.wienerlinien.at/ogd_realtime/monitor?rbl=4936&sender=rbl'
json_obj = urllib2.urlopen(url)
data_obj = simplejson.load(json_obj)

for item in data_obj['data']:
    print item

Das Problem ist jedoch das ich nicht auf die Einzelnen Elemente im dict. zugreifen kann. Könnte mir hier jmd. einen Tipp geben wie man sich durch so eine Liste bzw. dict iteriert ?
Konkret will ich auf die Abfahrtszeiten zugreifen.

mfg Gregor

ps.: Ich benutze python 2.7.9
BlackJack

@d4rkdr4g0n1: Das Python-Tutorial in der Python-Dokumentation sollte die nötigen Kenntnisse vermitteln.
d4rkdr4g0n1
User
Beiträge: 8
Registriert: Montag 9. Februar 2015, 20:11

Hallo, ich habs gelölst war doch nicht so schwierig. Ein bischen verwirrend.

Code: Alles auswählen

import urllib2
import simplejson

url = 'http://www.wienerlinien.at/ogd_realtime/monitor?rbl=4936&sender=rbl'



json_obj = urllib2.urlopen(url)
data_obj = simplejson.load(json_obj)
simplejson.dumps(data_obj)
# print(simplejson.dumps(data_obj,indent=2 * ''))


for item in data_obj['data']['monitors']:
    print("Haltestelle ") + item['locationStop']['properties']['title'] 

print('-------------------------------')
for item in data_obj['data']['monitors']:
    print("Richtung ") + item['lines'][0]['towards']
    
print('-------------------------------')
for item in data_obj['data']['monitors']:
    print item['lines'][0]['name']
    
print('-------------------------------')
for item in data_obj['data']['monitors']:
    print item['lines'][0]['departures']['departure'][0]['departureTime']['countdown']

for item in data_obj['data']['monitors']:
    print item['lines'][0]['departures']['departure'][1]['departureTime']['countdown']
Sieht umständlich aus :/

mfg Gregor
BlackJack

@d4rkdr4g0n1: Man könnte Zwischenergebnisse die mehrfach ermittelt werden an einen Namen binden, statt immer wieder den selben Wert zu ermitteln.

Warum eigentlich `simplejson`? Wie alt ist denn die Python-Version auf der das laufen soll? Das `json`-Modul ist jetzt schon recht lange Teil der Standardbibliothek.
Antworten