Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 25, 2015 20:08:00

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Requests - как распечатать json?

Я выгружаю с сайта response, содержащий json, все вроде бы хорошо, он нормально все декодирует, но результат получается в юникоде, а мне нужно его вывести в txt файл.
Выгрузка и печать в файл происходит с помощью библиотек requests и json вот таким образом:

search_result = requests.get(search_url).text
result = open('result.txt','w')
json.dump(search_result,result)
result.close()
Но json, как сказано выше - он в unicodе, и я получаю данные вида:
\u041c\u043e\u0441\u043a\u0432\u0430, \u0428\u0435\u0440\u0435\u043c\u0435\u0442\u044c\u0435\u0432\u043e
Какие есть пути, чтобы перекодировать все это в UTF-8? Во втором питоне можно было написать
json.dump(search_result,result).encode('utf8')
А в третьем это не прокатывает.

Офлайн

#2 Июнь 25, 2015 20:38:18

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Requests - как распечатать json?

Прямо на главной странице http://docs.python-requests.org/en/latest/

requests.get(URL).json()

>>> str('\u041c\u043e\u0441\u043a\u0432\u0430, \u0428\u0435\u0440\u0435\u043c\u0435\u0442\u044c\u0435\u0432\u043e')
'Москва, Шереметьево'

Отредактировано ayb (Июнь 25, 2015 20:40:35)

Офлайн

#3 Июнь 25, 2015 21:05:15

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Requests - как распечатать json?

Эту функцию я, естественно, осилила. Но
1) она выдает словарь, а вывод словаря в файл - это отдельная песня. Собственно, почему и пришлось модуль json использовать - с ним это удобнее
2) если даже сделать вывод по элементам словаря - все равно ругается на юникод

Офлайн

#4 Июнь 25, 2015 21:21:06

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Requests - как распечатать json?

Так в чем проблема ? Вы получаете юникодную строку. Дайте урл с которого получаете json.

Офлайн

#5 Июнь 25, 2015 21:49:42

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Requests - как распечатать json?

URL тут ни к чему, я нормально получаю информацию и декодирую ее, вопрос в том, как потом вывести json в txt файл.
JSON всегда будет в unicode, применить к нему encode нельзя, потому что это не str, а dict. То есть надо применять к каждому элементу в отдельности. Я могу это сделать с помощью цикла, но должно быть какое-то более простое и изящное решение.

Офлайн

#6 Июнь 25, 2015 22:18:11

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Requests - как распечатать json?

Elaphe
result = open('result.txt','w')
Укажите явно кодировку файла
Elaphe
как потом вывести json в txt файл.
Похоже у вас путаница в голове. Не бывает объекта типа json. Бывают строки, двоичные данные, словари, списки, объекты разных классов. Сначала научитесь выводить в файл строки.



Офлайн

#7 Июнь 26, 2015 15:19:36

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Requests - как распечатать json?

Тьфу ты, как все просто. Кодировку прописала при открытии файла - все сразу встало на свои места.

search_result = requests.get(search_url).text
result = open('result.txt','w', encoding='utf8')
json.dump(search_result,result,ensure_ascii=False)
result.close()
Всем спасибо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version