Mam aplikację, która wysyła obiekt JSON (sformatowany za pomocą prototypu) do serwera ASP. Na serwerze moduł Python 2.6 "json" próbuje załadować() JSON, ale dusi się na niektórych kombinacjach ukośników odwrotnych. Obserwuj:Python: json.loads dławiki po ucieczkach
>>> s
'{"FileExists": true, "Version": "4.3.2.1", "Path": "\\\\host\\dir\\file.exe"}'
>>> tmp = json.loads(s)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
{... blah blah blah...}
File "C:\Python26\lib\json\decoder.py", line 155, in JSONString
return scanstring(match.string, match.end(), encoding, strict)
ValueError: Invalid \escape: line 1 column 58 (char 58)
>>> s[55:60]
u'ost\\d'
Tak więc kolumna 58 jest ukośnikiem odwrotnym. Myślałem, że to właściwie uciekło! UNC to \\host\dir\file.exe
, więc podwoiłem się na ukośnikach. Ale najwyraźniej nie jest to dobre. Czy ktoś może pomóc? W ostateczności rozważam konwersję \ do/i znowu z powrotem, ale wydaje mi się, że to prawdziwy hack do mnie.
Z góry dziękuję!
:) >>> s = r '{ "FileExists": true , "Wersja": "4.3.2.1", "Ścieżka": "\\\\ host \\ dir \\ plik.exe"} ' >>> json.loads (s) {u'FileExists " : True, u'Path ': u' \\\\ host \\ dir \\ file.exe ', u'Version': u'4.3.2.1 '} – Chris
Co tak naprawdę r robi? Jak mogę zastosować go do łańcucha, który jest już przechowywany jako, powiedzmy, "foo". Czy to jakieś kodowanie? – Chris
'' s = ''łamie formatowanie. – jfs