2016-07-24 16 views
1

Ich bin teilweise die Lage, mit json als Datei gespeichert arbeiten:convert json retrived von url

#! /usr/bin/python3 

import json 
from pprint import pprint 

json_file='a.json' 
json_data=open(json_file) 
data = json.load(json_data) 
json_data.close() 
print(data[10]) 

Aber ich versuche, das gleiche von Daten direkt aus Web zu erreichen. Ich versuche, mit der akzeptierten Antwort here:

#! /usr/bin/python3 

from urllib.request import urlopen 
import json 
from pprint import pprint 

jsonget=urlopen("http://api.crossref.org/works?query.author=Rudra+Banerjee") 

data = json.load(jsonget) 
pprint(data) 

, die mir Fehler geben:

Traceback (most recent call last): 
    File "i.py", line 10, in <module> 
    data = json.load(jsonget) 
    File "/usr/lib64/python3.5/json/__init__.py", line 268, in load 
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) 
    File "/usr/lib64/python3.5/json/__init__.py", line 312, in loads 
    s.__class__.__name__)) 
TypeError: the JSON object must be str, not 'bytes' 

Was falsch ist hier los?

Ändern Sie den Code wie Par Charlie Antwort auf:

jsonget=str(urlopen("http://api.crossref.org/works?query.author=Rudra+Banerjee")) 

data = json.load(jsonget) 
pprint(jsonget) 

bricht bei json.load:

Traceback (most recent call last): 
    File "i.py", line 9, in <module> 
    data = json.load(jsonget) 
    File "/usr/lib64/python3.5/json/__init__.py", line 265, in load 
    return loads(fp.read(), 
AttributeError: 'str' object has no attribute 'read' 
+0

@alecxe Umwandlung: kann ich demütig gefragt, ob Sie den Code ran (seine minimal und vollständig), bevor das Duplikat was darauf hindeutet, und möglicherweise die enge Abstimmung ? – BaRud

+0

Ich entschuldige mich, wenn es kein echtes Duplikat ist, aber es sieht wirklich so aus. Ich bin offen dafür, die Frage erneut zu beantworten, wenn Sie freundlicherweise erklären können, warum dies ein anderer Anwendungsfall ist. Vielen Dank. Was Ihr letztes Problem angeht, verwenden Sie 'json.loads()' und nicht 'json.load()', da Sie jetzt einen String haben. – alecxe

+0

@alecxe: lädt auch fehlschlägt. Eigentlich habe ich deshalb den kompletten Code geladen und gefragt (demütig nochmal) ob du es wirklich ausgeführt hast. Wenn es ein mögliches Duplikat ist, bin ich damit einverstanden, es so zu markieren ... wir alle wollen so sauber. Aber das Problem sieht nicht direkt zu mir aus. aber dann habe ich keine Erfahrung im Umgang mit Json. – BaRud

Antwort

-1

Es ist eigentlich Sie die Antwort zu sagen: Sie bekommen ein Byte-Array zurück, wo in Python 3 eine Zeichenkette ist anders, weil sie mit Unicode arbeitet. In Python 2.7 würde es funktionieren. Sie sollten es beheben können, indem Sie Ihren Bytes explizit auf einen String mit

jsonget=str(urlopen("http://api.crossref.org/works?query.author=Rudra+Banerjee")_