Einzelne oder doppelte Anführungszeichen in Json laden in Python

8

Ich bemerke, dass einfache Anführungszeichen dazu führen, dass simplejson s loads function fehlschlägt:

%Vor%

Ich analysiere Dinge wie: foo = ["a", "b", "c"] aus einer Textdatei in Listen in Python und möchte auch foo = ['a', 'b', 'c'] akzeptieren. simplejson ist praktisch, um foo automatisch zu einer Liste zu machen.

Wie kann ich loads dazu bringen, einfache Anführungszeichen zu akzeptieren, oder automatisch Double für einfache Anführungszeichen ersetzen, ohne die Eingabe zu zerstören? Danke.

    
user248237dfsf 15.01.2013, 21:14
quelle

4 Antworten

25

Verwenden Sie das richtige Tool für den Job. Sie analysieren JSON nicht, sondern Python. Verwenden Sie daher %. co_de% stattdessen:

%Vor%     
Martijn Pieters 15.01.2013, 21:22
quelle
0

Ich habe mit dieser StackOverflow-Frage angefangen, als ich selbst nach einer Lösung suchte.

Die Lösung, die ast.literal_eval() verwendet, funktionierte nicht in allen meinen Fällen, da der Text auch gelegentlich boolesche Konstanten true / false hatte, die nicht als Python-Tokens (die groß geschrieben werden) erkannt wurden.

Um es für mich selbst zu lösen, habe ich einen benutzerdefinierten JSONDecoder erstellt, der in das standardmäßige json Python-Paket integriert wird.

>

pip install git+https://github.com/jpz/tolerantjsondecoder.git

Vielleicht kann das für die nächste Person von Nutzen sein.

Nachdem ich das abgeschlossen habe, habe ich später die Demjson -Bibliothek gefunden, die mehr zu sein scheint komplette Lösung, aber ich habe es nicht ausgewertet.

    
Jason Zavaglia 05.12.2017 03:19
quelle
0

Demjson macht deine Arbeit, aber es ist extrem langsam und ich meine sehr langsam im Vergleich zu simplejson. Ich empfehle es nicht für Produktionsumgebung.

ast.literal_eval () und yaml funktionieren auch nicht auf allen json, also brauchen Sie eine stabilere Lösung wie simplejson.

Wenn Sie simplejson ein wenig optimieren, dann kann es Ihre Arbeit machen. Ich selbst habe es getan und diesen Code geteilt.

Ich erzähle es in 2 Punkten

1) Laden Sie simplejson von github herunter und fügen Sie es Ihrem Projekt hinzu. 2) Jetzt hat Simplejson decoder.py Python-Datei. Ersetzen Sie diesen Dateicode durch diesen Code

%Vor%

2) simplejson hat scanner.py Python-Datei. Ersetzen Sie diesen Dateicode durch diesen Code

%Vor%

Jetzt sind Sie fertig. Simplejson ist die schnellste und stabilste Bibliothek, die ich verwendet habe.

Ich habe einige Zeilen Code in simplejson geändert und jetzt funktioniert diese großartige Bibliothek für

  • Unquoted json keys und Single Quoted json strings und keys

Ich habe nur den Python-Code geändert. Also, wenn Sie C-Erweiterung für Beschleunigung Boost verwenden, wird dieser Code nicht funktionieren.

    
user9379467 19.02.2018 06:55
quelle
0

Demjson macht deine Arbeit, aber es ist extrem langsam und ich meine sehr langsam im Vergleich zu simplejson. Ich empfehle es nicht für Produktionsumgebung.

ast.literal_eval () und yaml funktionieren auch nicht auf allen json, also brauchen Sie eine stabilere Lösung wie simplejson.

Wenn Sie simplejson ein wenig optimieren, dann kann es Ihre Arbeit machen. Ich selbst habe es getan und diesen Code geteilt.

Ich erzähle es in 2 Punkten

1) Laden Sie simplejson von github herunter und fügen Sie es Ihrem Projekt hinzu. 2) Jetzt hat Simplejson decoder.py Python-Datei. Ersetzen Sie diesen Dateicode durch diesen Code

%Vor%

2) simplejson hat scanner.py Python-Datei. Ersetzen Sie diesen Dateicode durch diesen Code

%Vor%

Jetzt sind Sie fertig. Simplejson ist die schnellste und stabilste Bibliothek, die ich verwendet habe.

Ich habe einige Zeilen Code in simplejson geändert und jetzt funktioniert diese großartige Bibliothek für

  • Unquoted json keys und Single Quoted json strings und keys

Ich habe nur den Python-Code geändert. Also, wenn Sie C-Erweiterung für Beschleunigung Boost verwenden, wird dieser Code nicht funktionieren.

Wo auch immer ich Änderungen vorgenommen habe, habe ich Kommentar # Code hier geändert

hinzugefügt

Ich habe irrtümlicherweise vorher als Gastbenutzer geantwortet und kann mich jetzt nicht einloggen, um diese Antwort zu bearbeiten, also postete ich sie im neuen Thread.

    
Nishi Sahlot 19.02.2018 07:44
quelle

Tags und Links