Python parsing json daten mit doppelten zitaten

Wie analysieren Sie json Daten mit doppelten Anführungszeichen innerhalb:

json.loads(' { "time":"1410661614", "text":"This is great", "from": { "username":"mrb", "id":"5071", "full_name":"Free "Mrb"" #here is the problem }, "id":"8090107" } ') 

Python kehrt zurück

 ValueError: Expecting ',' delimiter: line 1 column 107 (char 106) 

  • Python-Skript, das einen UnicodeEncodeError empfängt: 'ascii' Codec kann Zeichen nicht kodieren
  • Codierung beim Extrahieren von Daten aus der JSON-Datei
  • Pandas gruppieren nach verschachtelten json
  • Gibt es eine Möglichkeit, automatisch REST API JSON Beschreibung aus Flaschenrouten zu generieren
  • Mehrere Json Objekte in einer Datei extrahieren durch Python
  • Kann die JSON-Datei nicht analysieren, immer ValueError: Extra Data
  • Python verwenden, um PMML zu posten
  • Python - JSON Last aus Datei funktioniert nicht
  • 2 Solutions collect form web for “Python parsing json daten mit doppelten zitaten”

    Sie können dieses Problem einfach beheben, indem Sie dem doppelten Zitat ( \" ) entkommen

     import json json.loads(""" { "time":"1410661614", "text":"This is great", "from": { "username":"mrb", "id":"5071", "full_name":"Free \\"Mrb\\"" }, "id":"8090107" } """) 

    Wie in den Kommentaren gesagt, besser beheben die json Generator ordnungsgemäß entkommen das doppelte zitat, wird es schwer zu analysieren und korrigieren die json datei.

    Wer das Programm schrieb, das diese uneingeschränkten Zitate in Strings aussendet, braucht ein ernstes Gespräch mit …

    Wie Martijn sagte, das Parsen von willkürlichen verrückten Zitaten ist nicht einfach.

    OTOH, wenn der JSON ansonsten gut geformt ist und die beleidigenden Strings keine Liniengrenzen überschreiten, dann ist es nicht so schlimm. Z.B,

     #! /usr/bin/env python ''' Escape quotes in malformed JSON value strings Written by PM 2Ring 2014.09.19 ''' import re data = [ ''' "evil_name":"Free "Mrb"",''', ''' "good_name":"Alan Turing",''' ] for line in data: pre, val = line.split(':') parts = re.split('(")', val) n = parts.count('"') if n > 2: i = 1 a = [] for c in parts: if c == '"': if 1 < i < n: c = '\\"' i += 1 a.append(c) line = pre + ':' + ''.join(a) print line 

    Ausgabe

      "evil_name":"Free \"Mrb\"", "good_name":"Alan Turing", 
    Python ist die beste Programmiersprache der Welt.