Python Python Dictionary to json

truetone

Ensign
Registriert
März 2021
Beiträge
184
Hallöchen,

auf einem Server liegen in einem Ordner mehrere Dateien die jeweils ein Python Dictionary beinhalten und stündlich aktualisiert werden. Ich muss diese Daten nun regelmäßig per PHP weiterverarbeiten aber habe keinen Weg bisher gefunden, die Dateien zu lesen, damit ich z.B. über ein Array da dran kann.

Ich möchte nun z.B. per Python die Dateien ein JSON-File konvertieren (oder XML wäre mir auch recht, Hauptsache ich kann es mit PHP lesen). Folgenden Code habe ich nun aber ich weiß nicht, wie ich die Dateien aus dem Ordner nun durchgehe. Momentan steht immer das Dictionary direkt in der Datei aber ich habe sie in einer extra Datei. Kann mir jemand helfen?

Python:
import json
   
file = open("/root/the-file", "w");
   
with open("/root/result.json", "w") as outfile:
    json.dump(file, outfile)

Fehlermeldung:
Traceback (most recent call last):
File "test.py", line 6, in <module>
json.dump(file, outfile)
File "/usr/lib/python3.8/json/init.py", line 179, in dump
for chunk in iterable:
File "/usr/lib/python3.8/json/encoder.py", line 438, in _iterencode
o = _default(o)
File "/usr/lib/python3.8/json/encoder.py", line 179, in default
raise TypeError(f'Object of type {o.class.name} '
TypeError: Object of type TextIOWrapper is not JSON serializable

Vielen Dank!
 
Du versuchst ein Filehandle als JSON zu dumpen, wie soll das denn funktionieren?
Wenn in der input Datei ein Python Dictionary drin ist, musst du die Datei erst einmal als solches parsen.
Edit: Und wenn du eine Datei auslesen willst, ist das "w" Flag falsch.

PS: So etwas grundlos as root laufen zu lassen ist eine ganz schlechte Idee.
 
  • Gefällt mir
Reaktionen: PHuV, Raijin und abcddcba
musst du nicht erstmal die Input Datei auch lesen und als dictionary parsen?

Python:
with open('/root/the-file') as f:
    data = f.read()

js = json.loads(data)
 
  • Gefällt mir
Reaktionen: truetone
abcddcba schrieb:
js = json.loads(data)
json.loads() funktioniert nur, wenn die datei sowieso schon json enthält. nur kann man sich dann das ganze sparen :)

wenn die datei ein python dictionary enthält, dann meckert json.loads() rum, weil es z.b. anführungszeichen statt hochkomma erwartet. in dem fall hilft dann sowas:
Python:
import ast
import json

with open("dict.txt", "r") as f1:
    with open("json.txt", "w") as f2:
        f2.write(json.dumps(ast.literal_eval(f1.read())))

ast.literal_eval() statt nur eval() ist wichtig, weil wir ja nicht ausversehen irgendwelchen bösen code ausführen wollen.

am besten wäre es natürlich, wenn die anwendung, die diese dateien mit den python dictionaries erstellt, selbst einfach ein json.dumps() macht.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: PHuV, madmax2010 und truetone
Zurück
Oben