JSON standard определяет конкретный набор valid 2-character escape sequences: \\
, \/
, \"
, \b
, \r
, \n
, \f
и \t
, и одна последовательность символов 4 символов определить любой элемент кода Unicode, \uhhhh
(\u
плюс 4 гекс цифр). Любая другая последовательность обратной косой черты плюс другой символ: недействительный JSON.
Если у вас есть источник JSON вы не можете исправить иначе, единственный выход, чтобы удалить недопустимые последовательности, как вы сделали с str.replace()
, даже если это немного хрупким (это будет перерыва когда есть четная обратная косая черта, предшествующая цитате).
Вы можете использовать регулярное выражение тоже, где вы удалите любые обратные слэши не используются в действительной последовательности:
fixed = re.sub(r'(?<!\\)\\(?!["\\/bfnrt]|u[0-9a-fA-F]{4})', r'', inputstring)
Это не подловить последовательность обратной косой нечетным счета как \\\
но поймает все остальное:
>>> import re, json
>>> broken = r'"JSON string with escaped quote: \' and various other broken escapes: \a \& \$ and a newline!\n"'
>>> json.loads(broken)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mjpieters/Development/Library/buildout.python/parts/opt/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/Users/mjpieters/Development/Library/buildout.python/parts/opt/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Users/mjpieters/Development/Library/buildout.python/parts/opt/lib/python3.5/json/decoder.py", line 355, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Invalid \escape: line 1 column 34 (char 33)
>>> json.loads(re.sub(r'(?<!\\)\\(?!["\\/bfnrt]|u[0-9a-fA-F]{4})', r'', broken))
"JSON string with escaped quote: ' and various other broken escapes: a & $ and a newline!\n"
Параметр '\ '' последовательность символов действительно недействителен JSON, потому что нет такой последовательности бежать в формате JSON. Как вы производили этот вывод в первую очередь? –
Привет, Martijn, я не производил его вообще, просто работая с тем, что было дано мне. По-видимому, он был создан с помощью «Экспорт в JSON-плагин для PHPMyAdmin». – patrick
Рассмотрите возможность подачи отчета об ошибке в этот проект. –