2016-06-20 15 views
0

Ich folgte einem Tutorial über die Verwendung von JSON-Objekten (Link: https://www.youtube.com/watch?v=Y5dU2aGHTZg). Wenn sie den Code ausgeführt haben, haben sie keine Fehler, aber ich habe es getan. Hat es etwas mit verschiedenen Python-Versionen oder etwas zu tun?Warum gibt es mir den Fehler, "das JSON-Objekt muss str sein, nicht 'Bytes'", und wie kann ich es beheben?

from urllib.request import urlopen 
import json 

def printResults(data): 
    theJSON = json.loads(data) 
    print (theJSON) 

def main(): 
    urlData ="http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_day.geojson" 

    webUrl = urlopen(urlData) 
    print(webUrl.getcode()) 
    if (webUrl.getcode()==200): 
     data = webUrl.read() 
     printResults(data) 
    else: 
     print ("You failed") 

main() 

Antwort

5

Die HTTPResponse object von urlopen zurück liest bytes Daten (raw Binärdaten), nicht str Daten (Textdaten), während die json Modul mit str arbeitet. Sie müssen die Kodierung, die für die empfangenen Daten verwendet wird, kennen (oder die Header überprüfen) und decode, bevor Sie json.loads verwenden.

Angenommen, es ist UTF-8 (die meisten Websites sind), können Sie einfach ändern:

data = webUrl.read() 

zu:

data = webUrl.read().decode('utf-8') 

und es sollte das Problem beheben.

+0

Vielen Dank ! Das hat es behoben. –

0

Ich glaube, sie waren eine andere Version des urllib

Versuchen mit urllib3 verwenden und wie diese den Import zu tun:

from urllib import urlopen 

Hoffe, das ist die Lösung, um Ihr Problem

Verwandte Themen