Не удается загрузить Unicode JSON / сериализованный словарь из-за ошибки Unicode - PullRequest
0 голосов
/ 20 января 2019

Мне дали некоторые данные, которые я должен проанализировать и преобразовать в Dict.Я не контролирую, как генерируется ввод.

Пример ввода u'{u\'my_key\': u\'AB\\N\'}'.Обратите внимание, что это должен представлять собой сериализованный словарь.

Не удается выполнить синтаксический анализ этой строки словаря, используя различные методы.Использование json.loads не удается из-за неправильной структуры структуры из-за вложенной u.Использование ast.literal_eval завершается с ошибкой (unicode error) 'unicodeescape' codec can't decode bytes in position 3-4: malformed \N character escape.

Мне нужно как-то санировать ввод, чтобы \N не считался символом ascii при разборе с ast.Выполнение простого replace('\\', '\\\\') кажется склонным к ошибкам и, вероятно, имеет множество крайних случаев.

В качестве альтернативы мне нужен способ удалить u из вложенной строки, чтобы json.loads работал.

Спасибо

1 Ответ

0 голосов
/ 20 января 2019

Обработка такого рода ввода нелегка. На самом деле единственное решение, которое мне удалось найти, это:

input_data = u'{u\'my_key\': u\'AB\\N\'}'

i = input_data\
    .replace('\'', '"')\
    .replace('u', '')\
    .replace('\\', '\\\\')

data = json.loads(i)
print(type(data))
# <type 'dict'>

Это может решить ваш конкретный пример, однако я не рекомендую использовать его в вашем проекте.

Как сказал @snakecharmerb, я бы также предложил применить некоторую политику к входам и проверить строку json перед отправкой, используя что-то вроде this , например.

...