Einfache statt doppelte Anführungszeichen im json-Belastungen in Python
Ich feststellen, dass single-quotes Ursache simplejson
's loads
- Funktion fehlschlagen:
>>> import simplejson as json
>>> json.loads("\"foo\"")
'foo'
>>> json.loads("\'foo\'")
Traceback (most recent call last):
...
ValueError: No JSON object could be decoded
Ich bin Parsen Dinge wie: foo = ["a", "b", "c"]
aus einer Textdatei in die Listen in Python und möchte auch akzeptieren foo = ['a', 'b', 'c']
. simplejson
ist bequem für die Herstellung foo
automatisch in eine Liste.
Wie bekomme ich loads
zu akzeptieren, einzelne Zitate oder automatisch ersetzen das doppelte für einzelne Zitate ohne Zerstörung der Eingang? danke.
- Nach der JSON spec, es ist nicht JSON, wenn es mit einfachen Anführungszeichen.
- AFAIK, alle strings in JSON-strings müssen Anführungszeichen gesetzt werden.
["a"]
gültig ist JSON in der Erwägung, dass['a']
nicht - Ok, also, wie kann ich Ersatz-single zu double quotes via python?
str.replace()
- die docs sind Recht Mann.- Kannst du nicht beheben, was ist produzieren, die fehlerhafte Ausgabe statt? Sind Sie sich sicher, dass es sein soll ist JSON?
- Was, wenn es ein
'string with a " quote in it?'
. Dies ist nicht die JSON-Ausgabe, was sonst noch falsch sein? - falsch. Das würde nicht auf
json.loads("\"\'\"")
- Sie reden darüber, versuchen zu analysieren, nicht-JSON JSON, nahm ich an, dass der fix wird hacky wäre nicht ein großes Problem.
- Was ist Ihre eigentliche problem? Versuchen Sie zu analysieren JSON-wie JavaScript? Vielleicht sollten Sie einen JavaScript-parser in diesem Fall?
- Ich bin Parsen Dinge wie:
foo = ["a", "b", "c"]
in Listen in Python und möchte auch akzeptierenfoo = ['a', 'b', 'c']
ast.literal_eval()
. Wenn Sie möchten, analysieren Python-Literale verwenden einen parser geschrieben für die Aufgabe.- Laut wikipedia, Anführungszeichen sind nicht Teil der JSON-Spezifikation.. Mögliche Duplikate von: stackoverflow.com/questions/4162642/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie das richtige Werkzeug für den job, Sie sind nicht Parsen von JSON-aber Python zu verwenden, so
ast.literal_eval()
statt:JSON-Dokumente verwenden Sie immer Anführungszeichen für strings, UTF-16 für
\uhhhh
hex-escape-syntax, haben{...}
Objekte für Schlüssel-Wert-Paare mit dem Schlüssel immer strings und Sequenzen werden immer[...]
Listen und verwenden Sienull
,true
undfalse
Werte; beachten Sie die Kleinschreibung Boolean. Zahlen kommen in die integer-und floating-point-Formen.In Python string-Darstellungen können einzelne und doppelte Anführungszeichen Unicode-escapes verwenden
\uhhhh
und\Uhhhhhhhh
Formen (kein UTF-16-Ersatzzeichen Paare), Wörterbücher mit{...}
display-syntax können den Tasten viele verschiedene Arten, anstatt nur strings, Sequenzen werden kann Listen ([...]
), sondern können auch Tupel ((...)
), oder Sie können andere container-Typen noch. Python hatNone
,True
undFalse
(Titlecase!) und zahlen kommen in Ganzzahlen, Fließkommazahlen und komplexe Formen.Verwirrend, man kann entweder dazu führen, zu analysieren, Fehler oder subtile Probleme beim Dekodieren passiert ist erfolgreich, aber die Daten wurden falsch interpretiert, wie mit maskierten nicht-BMP-codepoints solche Emoji. Stellen Sie sicher, dass Sie die richtige Methode, um Sie entschlüsseln! Und in den meisten Fällen, wenn Sie Python-syntax Daten jemand doch tatsächlich die falsche Methode zum codieren und nur versehentlich produziert Python-Darstellungen. Sehen Sie, wenn die Quelle muss die Befestigung in diesem Fall; in der Regel die Ausgabe wurde produziert mit
str(object)
wojson.dumps(obj)
sollten, wurden stattdessen verwendet.Begann ich in dieser StackOverflow-Frage, wenn Sie suchen, um dieses Problem zu lösen mich selbst.
Die Lösung zu verwenden
ast.literal_eval()
hat nicht funktioniert für alle meine Fälle, wie der text auch gelegentlich booleschen Konstanten true/false, was nicht anerkannt Python-Token (die groß geschrieben.)Um es zu lösen für mich, ich wrok eine benutzerdefinierte JSONDecoder Stecker in die standard-json Python-Paket.
pip install git+https://github.com/jpz/tolerantjsondecoder.git
Vielleicht von nutzen sein können an die nächste person.
Auch, zu beachten, nachdem ich diese abgeschlossen, wie ich später fand die demjson Bibliothek, die zu sein scheint, der eine vollständige Lösung, jedoch habe ich nicht bewertet, es.