Gegeben zwei (ziemlich groß) Räumlichkeiten, kann es noch analysiert werden:
{
, }
, & :
sind keine gültigen Werte für eines der Felder
- Jeder Eintrag
{}
besteht aus 3 Teilen
2 könnte entfernt werden, wenn Sie das Parsen von Schlüssel/Wert-Paaren verallgemeinern, wenn die Anzahl variiert.
1 kann auch leicht entspannt sein kann, wenn Sie sagen, dass :
kann nur in den Wertfeldern erscheinen (in beliebiger Menge).This would be mutually exclusive to #2, however.
Die Regex:
{\"([^\"]*)\":\"([^:\n\r]*)\",?\"([^\"]*)\":\"([^:\n\r]*)\",?\"([^\"]*)\":\"([^:\n\r]*)\",?}
oder als Ausgangs string:
r'{"([^"]*)":"([^:\n\r]*)",?"([^"]*)":"([^:\n\r]*)",?"([^"]*)":"([^:\n\r]*)",?}'
regex101
HINWEIS: Dieser Griff keine Leerzeichen in den JSON Teile, aber das kann bei Bedarf hinzugefügt werden, es ist schon ziemlich lang/
Verbrauch:
pattern = r'{"([^"]*)":"([^:\n\r]*)",?"([^"]*)":"([^:\n\r]*)",?"([^"]*)":"([^:\n\r]*)",?}'
matches = re.findall(pattern, input)
for match in matches:
result = {match[0]: match[1], match[2]: match[3], match[4]: match[5]}
# Do something with each result
Im Einsatz:
>>> pattern = '{\"([^\"]*)\":\"([^:\n\r]*)\",?\"([^\"]*)\":\"([^:\n\r]*)\",?\"([^\"]*)\":\"([^:\n\r]*)\",?}'
>>> matches = re.findall(pattern, input)
>>> for match in matches:
result = {match[0]: match[1], match[2]: match[3], match[4]: match[5]}
>>> result
{'quote': 'bla bla "blah blah" bla', 'name': 'bla', 'occupation': 'blabla'}
Ein weiteres Beispiel:
>>> input = """{"name":"b"testst,s'''""'''''''t""e,"la","quote":"bla bla "blah b,lah" bla","occupation":"bl,,,abla"}"""
>>> matches = re.findall(pattern, input)
>>> for match in matches:
result = {match[0]: match[1], match[2]: match[3], match[4]: match[5]}
>>> result
{'quote': 'bla bla "blah b,lah" bla', 'name': 'b"testst,s\'\'\'""\'\'\'\'\'\'\'t""e,"la', 'occupation': 'bl,,,abla'}
Dies kann nicht in einer allgemeinen, zuverlässigen Art und Weise gelöst werden. Reparieren Sie die Anwendung, die das falsche JSON erzeugt, an erster Stelle, damit ein gültiges JSON erstellt wird. – Barmar
Der ganze Grund, warum JSON eingebettete Anführungszeichen benötigt, um es zu maskieren, liegt daran, dass alles andere mehrdeutig ist. Wenn es automatisch behoben werden könnte, wären die Standard-JSON-Parser in der Lage, dies selbst zu tun. – Barmar
Wird die Datei wie in Ihrem Beispiel neu eingefügt? – TemporalWolf