simplejson.Lasten (in) Unwirksam sein \escape: 'x'
Bin ich lernen, wie man simplejson zu entschlüsseln JSON-Datei. Allerdings hatte ich die "ungültig \escape" - Fehler.
Hier ist der code
import simplejson as json
def main():
json.loads(r'{"test":"\x27"}')
if __name__ == '__main__':
main()
Und hier ist die Fehlermeldung
Traceback (most recent call last):
File "hello_world.py", line 7, in <module>
main()
File "hello_world.py", line 4, in main
json.loads(r'{"test":"\x27"}')
File "C:\Users\zhangkai\python\simplejson\__init__.py", line 307, in loads
return _default_decoder.decode(s)
File "C:\Users\zhangkai\python\simplejson\decoder.py", line 335, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\zhangkai\python\simplejson\decoder.py", line 351, in raw_decode
obj, end = self.scan_once(s, idx)
File "C:\Users\zhangkai\python\simplejson\scanner.py", line 36, in _scan_once
return parse_object((string, idx + 1), encoding, strict, _scan_once, object_
hook)
File "C:\Users\zhangkai\python\simplejson\decoder.py", line 185, in JSONObject
value, end = scan_once(s, end)
File "C:\Users\zhangkai\python\simplejson\scanner.py", line 34, in _scan_once
return parse_string(string, idx + 1, encoding, strict)
File "C:\Users\zhangkai\python\simplejson\decoder.py", line 114, in py_scanstr
ing
raise ValueError(errmsg(msg, s, end))
ValueError: Invalid \escape: 'x': line 1 column 10 (char 10)
Ich denke, json-parser erkennen soll, zu entkommen. Also ich will wissen was falsch ist und was ich machen soll.
Danke, ich werde versuchen Sie zu formatieren, meine Frage beim nächsten mal.:)
InformationsquelleAutor kkpattern | 2010-11-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
JSON hat keine hex-escape (
\xNN
), wie Sie in einigen Sprachen (wie JavaScript) und Notationen tun, details hier. Es verfügt über eine unicode-escape -,\uNNNN
woNNNN
vier hex-Ziffern, aber keine\x
hex entkommen.Wenn die Datei
\x
notation, es ist nicht im JSON-format. Wenn Sie möchten, zu akzeptieren, ungültige JSON-eh, ja, Sie müssten pre-Prozess-it-yourself. Angenommen, Sie möchten, behandeln die\x
dem Weg JavaScript tut, konvertieren\xNN
zu\u00NN
(z.B.\x27
wird\u0027
). FWIW, wie\x
und\u
behandelt werden, durch JavaScript - nicht JSON -- ist abgedeckt durch Abschnitt 7.8.4 die ECMAScript-Spezifikation. Aber mein Lesen ist es wirklich nur eine Frage der änderung derx
zu einemu
und das hinzufügen von führenden Nullen. Am besten,Können Sie bitte erläutern
just a matter of changing the x to a u and adding the leading zeroes
? Wie mache ich mit einem Charakter, der Teil einer großen Schnur?Sagen Sie haben die rohen JSON in einen string, zum Beispiel:
str = '{"foo": "bar\\x23 testing 1 2 3 \\x23"}'
können Sie wandeln diese um\u
notation mit einem einfachen ersetzen:str2 = str.replace(/\\x/g, "\\u00")
Dannstr2
erfolgreich zu analysieren, und Sie haben ein Objekt mit einer Eigenschaft, diefoo
mit dem Wert"bar# testing 1 2 3 #"
(weil\x23
/\u0023
ist#
).Nicht
load
,JSON.parse
. Vorausgesetzt, der text, den Sie sich beziehen, ist JSON.InformationsquelleAutor T.J. Crowder
Dies ist das erwartete Verhalten von einem parser als JSON ist ungültig; in einem string ein slash gefolgt werden kann nur durch
"
,\
,/
,b
,f
,n
,r
,t
oderu
(die müssen dann gefolgt von 4 hex-Zeichen). Einx
ist nicht erlaubt. Siehe die Skillung an http://json.org/InformationsquelleAutor Quentin
versuchen python-cjson
InformationsquelleAutor andres101