Кажется, что они закодировали свою строку Unicode в байты, используя utf-8, а затем преобразовали байты в JSON. Это очень плохое поведение с их стороны.
Пример Python 3:
>>> '\u00c3\u00a1'.encode('latin1').decode('utf-8')
'á'
Вам нужно проанализировать JSON и просмотреть все данные, чтобы исправить это:
def visit_list(l):
return [visit(item) for item in l]
def visit_dict(d):
return {visit(k): visit(v) for k, v in d.items()}
def visit_str(s):
return s.encode('latin1').decode('utf-8')
def visit(node):
funcs = {
list: visit_list,
dict: visit_dict,
str: visit_str,
}
func = funcs.get(type(node))
if func:
return func(node)
else:
return node
incorrect = '{"foo": ["\u00c3\u00a1", 123, true]}'
correct_obj = visit(json.loads(incorrect))