2015-01-22 3 views
0

У меня есть объект JSON, который был сохранен в файл с помощью магнезии функции:Как декодировать Юникод объекта JSON в Python

f = open('file', 'w') 
f.write(repr(my_json)) 
f.close() 

Кодированного JSON теперь ведущий «и» символов, указывающих на кодировку Unicode.

{u'messages': 'messages'} 

Это ожидаемое поведение Python 2.x, но теперь я пытаюсь выяснить, как декодировать строку, хранящуюся в этом файле. Все, что я пробовал, дал мне ту же ошибку:

ValueError: Expecting property name: line 1 column 2 (char 1) 

Помощь?

+0

Почему вы не пишете их с помощью 'json.dumps'? –

+0

Я этого не писал. Я просто застрял, пытаясь его расшифровать. –

+1

@kid_drew Я думаю, что Рафаэль говорит, что вы не должны использовать f.write (repr (my_json)), чтобы записать его в файл в начале. Вместо этого вы должны использовать json.dump. – skyline75489

ответ

1

Предполагая, что данные, которые были записаны в файл, были json (able), это также означает, что это представление должно быть литералом python. Итак ... Вы можете попробовать «декодировать» его, используя ast.literal_eval.

например.

import ast 
with open('file', 'r') as datafile: 
    literal_data = datafile.read() 

json_data_decoded = ast.literal_eval(literal_data) 

демка ast.literal_eval работы с префиксом u:

>>> repr(data) 
"{u'foo': u'bar'}" 
>>> ast.literal_eval(repr(data)) 
{u'foo': u'bar'} 
>>> ast.literal_eval(repr(data))['foo'] 
u'bar' 

Обратите внимание, что может быть несколько версий питона (3.0, 3.1 and 3.2), где это не работает. У меня на самом деле нет хорошего пути для этих версий - надеюсь, вам не нужно их поддерживать.

+0

btw просто обычный eval работает отлично для меня в 2.7 и 3.4 – user3467349

+0

json_data_decoded все еще строка с ведущими символами u для меня. –

+0

Царапина, что. Я что-то прикрутил. Это сработало. =) –

Смежные вопросы