Seite 1 von 1
Werte aus Json in Objekte lesen
Verfasst: Dienstag 11. August 2020, 22:14
von cbesi
Hallo, meistens sind die einfachsten Sachen die einen am meisten aufhalten:
Ich nutze einen curl von Feiertagen, den Output prase ich mir in eine Json. als Datei
Hier ein Auszug aus der Json:
{
"1. Weihnachtstag": {
"datum": "2020-12-25",
"hinweis": ""
},
"2. Weihnachtstag": {
"datum": "2020-12-26",
"hinweis": ""
},
"Allerheiligen": {
"datum": "2020-11-01",
"hinweis": ""
},
Damit ich die Werte in eine vorhandene Firebird Datenbank in einzelne Felder schreiben kann benötige ich die Feiertage als Objekt sowie das Datum (welches ich noch umformatieren muss in DD.MM.YYYY). Ich habe jetzt den ganzen Abend mit recherche zugebracht, aber es will mir nicht gelingen die Werte in Objekte zu bekommen.
Es würde mich sehr freuen wenn mir jemand den Hinweis geben kann wie ich das hin bekomme. Der Rest des Codes steht

Re: Werte aus Json in Objekte lesen
Verfasst: Mittwoch 12. August 2020, 04:42
von sparrow
Warum der komplizierte Umweg? Bevor du mit 'curl' etwas holst und eine json-Datei schreibst, die du dann liest, kannst du die Daten auch direkt mit Python holen. Spart einen Bruch. Schau dir das requests Modul an.
In der Standardbibliothek ist das json Modul. Damit liest du entsprechend formatierte Daten ein.
Das datetime Modul für das Datum.
Wobei es hier sehr seltsa wäre, wenn man das so formatieren müsste, wie du schreibst.
Re: Werte aus Json in Objekte lesen
Verfasst: Mittwoch 12. August 2020, 06:39
von cbesi
Vielen Dank für deine Antwort.
Das json Modul nutze ich bereits um das json in das Format oben zu setzen. Den Import in die Datei will ich haben, um zu sehen was gezogen wurde (kann man als Log sehen wenn man will).
Ich verstehe bei dem Json nur nicht wie ich 1.Weihnachtstag auslesen kann und den zugehörigen Wert Datum. Ich weiss es gibt 1000 Beispiele im Web. Aber in diesen ist das Json meistens anders gegliedert.
Vielleicht hat jemand einen kleinen Codeschnipsel für mich damit ich es schnalle ?
Das Datum muss tatsächlich so formatiert werden, auch wenn es nicht üblich ist

Re: Werte aus Json in Objekte lesen
Verfasst: Mittwoch 12. August 2020, 07:41
von Jankie
Wenn du die json eingelesen hast mit
Code: Alles auswählen
with open('TEST.json') as json_file:
data = json.load(json_file)
dann kannst du die Werte auslesen wie bei einem
Dictionary.
Also so sprichst du die einzelnen Werte an:
Code: Alles auswählen
for day in data:
print(day)
print(data[day]['datum'])
print(data[day]['hinweis'])
Re: Werte aus Json in Objekte lesen
Verfasst: Mittwoch 12. August 2020, 07:43
von noisefloor
Hallo,
das schöne ist, dass JSON und Python-Datenstrukturen ziemlich gut zusammen passen. Ein JSON-Object ist ein Python Dict und ein JSON-Array eine Python Liste. Bei der gegebenen Datenstruktur hast du also in Python ein verschachteltest Dict, in dem "1. Weihnachtstag" etc. die Schlüssel sind, deren Werte wiederum ein Dict sind.
Ansonten gilt: zeig' deinen Code, auch wenn der ggf. nicht funktioniert, dann hat man einen konkreteren Ansatz zum helfen.
Gruß, noisefloor
Re: Werte aus Json in Objekte lesen
Verfasst: Mittwoch 12. August 2020, 08:15
von cbesi
Danke für deine schnelle Antwort,
ich glaube so langsam fällt der Groschen.....
Re: Werte aus Json in Objekte lesen
Verfasst: Mittwoch 12. August 2020, 19:54
von cbesi
import json
import datetime
with open('NRW.txt') as json_file:
data = json.load(json_file)
for day in data:
Feiertag = (day)
Feiertagsdatum = datetime.datetime.strptime((data[day]['datum']), '%Y-%m-%d').strftime('%d.%m.%Y')
Bemerkung = (data[day]['hinweis'])
print (Feiertag)
print (Feiertagsdatum)
print (Bemerkung)
Danke das war genau der Tip der mir fehlte, es macht was es machen soll nun!
Re: Werte aus Json in Objekte lesen
Verfasst: Mittwoch 12. August 2020, 20:08
von Sirius3
Warum weißt Du die Schlüssel erst der Variable `day` zu, um sie gleich danach an `Feiertag` zu binden. Warum nicht gleich `Feiertag`?
Wenn Du zusätzlich den Inhalt brauchst, gibt es dict.item.
Variablennamen schreibt man komplett klein.
Warum mußt Du das Datum umformatieren? Für Datenbanken ist ja das erstere üblich.
Code: Alles auswählen
import json
import datetime
with open('NRW.txt', encoding="utf8") as json_file:
feiertage = json.load(json_file)
for feiertag, info in feiertage.items():
feiertagsdatum = datetime.datetime.strptime(info['datum'], '%Y-%m-%d')
bemerkung = info['hinweis']
print(feiertag)
print(feiertagsdatum.strftime('%d.%m.%Y'))
print(bemerkung)
Re: Werte aus Json in Objekte lesen
Verfasst: Mittwoch 12. August 2020, 20:22
von cbesi
Wieder einmal Danke für die Antwort, wieder etwas schlauer....
Ich habe deinen Code verstanden und nun so eingebaut.
Wieso das Datenbankfeld das Datum in dem Format willl weiss ich nicht. Es handelt sich um eine bestehende Datenbankstruktur einer Software. Mache ich einen insert per SQL Manager Lite mit dem üblichen Format, bekomme ich falsches Datumsformat zurück. Also trage ich es umformatiert ein, und es geht.
Re: Werte aus Json in Objekte lesen
Verfasst: Mittwoch 12. August 2020, 20:30
von __blackjack__
@cbesi: Wieso wird das Datum überhaupt als Zeichenkette formatiert? Die DB API V2 nimmt da eigentlich `datetime`-Objekte und keine Zeichenketten. Es kann sein das konkrete Module die diese API umsetzen auch Zeichenketten nehmen, aber das muss nicht sein, und bringt halt genau solche Formatprobleme mit sich.