Seite 1 von 1

Python String mit Json parsen

Verfasst: Freitag 28. Mai 2010, 18:59
von Barabbas
Hallo zusammen,

ich versuche gerade das Tool lsdvd mit meinem Python-Skript zu nutzen. lsdvd bietet dabei die schöne Möglichkeit, die Ausgabe in Python-Syntax vorzunehmen, so dass ich mir das fehlerträchtige Parsen der Ausgabe schenken kann.

Die Ausgabe sieht dabei wie folgt aus: http://www.python-forum.de/pastebin.php?mode=view&s=22

Um das Ganze mit Json verarbeiten zu können, entferne ich zunächst die Zeichenkette "lsdvd = " am Anfang und ersetze die SingleQuotes durch DoubleQuotes. So bleibt ja eigentlich nur eine String-Repräsentation eines verschachtelten Dicts, das man mit Json einlesen können müsste. Wenn ich Json nun aber darüberlaufen lassen

Code: Alles auswählen

j = json.JSONDecoder()
j.raw_decode(lsdvd_ret)
erhalte ich folgenden Fehler:
ValueError: Expecting property name: line 16 column 9 (char 333)
Vermutlich muss ich den String noch "escapen", bevor ich ihn an Json weiterreichen kann. Hat jemand eine Idee, wie ich das machen könnte? Auf eval würde ich gerne verzichten (das hat aber bei einem Test problemlos funktioniert).

Besten Dank schonmal für eure Zeit,

brb

Re: Python String mit Json parsen

Verfasst: Freitag 28. Mai 2010, 21:20
von Trundle
Wenn du das "lsdvd = " vorher entfernst, könntest du es mit `ast.literal_eval()` laden und dann wieder als JSON ausgeben.

Re: Python String mit Json parsen

Verfasst: Freitag 28. Mai 2010, 21:32
von Barabbas
Danke, das kannte ich noch nicht. Scheint genau das zu sein, was ich gesucht habe. Besten dank!

Re: Python String mit Json parsen

Verfasst: Samstag 29. Mai 2010, 11:02
von sma
Der Fehler kommt übrigens daher, dass diverse Zeilen ein Komma vor einer schließenden Klammer enthalten, was kein gültiges JSON-Format ist. Dass die ' zu " werden müssen, hattest du ja schon erkannt. So geht's:

Code: Alles auswählen

import json, re
print(json.loads(re.sub(r",([\s\n]*[\]}])", "\\1", s).replace("lsdvd = ", "").replace("'", '"')))
Stefan