2013-06-04 4 views
0

Я пытаюсь отправить запрос GET на URL-адрес, который, как я знаю, возвращает данные в форме JSON с использованием python. Тем не менее, я продолжаю получать ошибку декодирования Unicode в строке 21:Ошибка декодирования Unicode для JSON в python

Traceback (most recent call last): 
    File "MeetupQueryScript.py", line 21, in <module> 
    member = json.load(object) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 278, in load 
    **kw) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads 
    return _default_decoder.decode(s) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode 
    obj, end = self.scan_once(s, idx) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe7 in position 20: invalid continuation byte 

Любая идея в порядке?

import urllib2 
import json 

key = '#########' 

url = "https://api.meetup.com/2/groups?&sign=true&zip=78705&page=1&key=" + key + "&&sign=true" 
object = urllib2.urlopen(url) 
#print [method for method in dir(object) if callable(getattr(object, method))]             
#print object.next()                            
groupList = json.load(object)["results"] 
groupIDs = [] 

for group in groupList: 
    groupIDs.append(group["id"]) 

members = [] 

for id in groupIDs: 
    url = "https://api.meetup.com/2/members?&sign=true&group_id=" + str(id) + "&key=" + key 
    object = urllib2.urlopen(url) 
    member = json.load(object) 
    members.append(member) 

print members 
+2

Отключить тему: избегать использования 'object' в качестве имени переменной. –

ответ

0

вы получаете от Meetup данных latin1 закодирован (печать '\ xe7'.decode (' Latin1') приводит к 'C'). Я пробовал свой код с member = json.load(object,encoding='latin1'), и он сработал.

Я бы рекомендовал requests хотя, из-за этого иметь более удобный интерфейс:

import requests 

url = "https://api.meetup.com/2/groups?&sign=true&zip=78705&page=1&key=" + key + "&&sign=true" 
groupList = requests.get(url).json()["results"] 
groupIDs = [] 

for group in groupList: 
    groupIDs.append(group["id"]) 

    members = [] 

for id in groupIDs: 
    url = "https://api.meetup.com/2/members?&sign=true&group_id=" + str(id) + "&key=" + key 
    member = requests.get(url).json() 
    members.append(member) 

print members 

и я второй рекомендации не скрывать object в вашем коде. Также проверьте python style guidelines.

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