Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTTPResponse object -- JSON object must be str, not 'bytes'

I've been trying to update a small Python library called libpynexmo to work with Python 3.

I've been stuck on this function:

def send_request_json(self, request):     url = request     req =  urllib.request.Request(url=url)     req.add_header('Accept', 'application/json')     try:         return json.load(urllib.request.urlopen(req))     except ValueError:         return False 

When it gets to this, json responds with:

TypeError: the JSON object must be str, not 'bytes' 

I read in a few places that for json.load you should pass objects (In this case an HTTPResponse object) with a .read() attached, but it doesn't work on HTTPResponse objects.

I'm at a loss as to where to go with this next, but being that my entire 1500 line script is freshly converted to Python 3, I don't feel like going back to 2.7.

like image 874
Chevron Avatar asked Jun 05 '14 19:06

Chevron


1 Answers

Facing the same problem I solve it using decode()

... rawreply = connection.getresponse().read() reply = json.loads(rawreply.decode()) 
like image 54
costas Avatar answered Sep 22 '22 11:09

costas