Python JSON NoneType

DrevenaOhrada

Python JSON NoneType
« kdy: 29. 04. 2014, 20:34:02 »
Zdravím,

učím se těď v Python 3 a už druhý den řeším jeden menší problém. Má se stáhnout stránka a json má přebrat obsah stránky. Bohužel vše skončí chybou TypeError: the JSON object must be str, not 'NoneType'. Poradil by někdo jak to dokončit?

Děkuji všem :)

Kód: [Vybrat]
import pymysql as mdb
import pycurl
import json


class Trida:

def getPage(self, url):

c = pycurl.Curl()
c.setopt(pycurl.URL, url)
c.setopt(pycurl.HTTPHEADER, ['Accept:'])
c.setopt(pycurl.SSL_VERIFYPEER, 0)
c.setopt(pycurl.FOLLOWLOCATION, 1)

return c.perform()


def getData(self):

getContent = self.getPage('https://www.web.cz/api')

array = json.loads(getContent)

print(array)


getTrida = Trida()

getTrida.getData()



Re:Python JSON NoneType
« Odpověď #1 kdy: 29. 04. 2014, 20:58:02 »
Vsadil bych se, že funkce getPage vrátí None, protože funkce perform vrátí None. Já teda pycurl nepoužívám, takže je to jen takový rychlý odhad. Doporučuju místo pycurl použít requests.

Re:Python JSON NoneType
« Odpověď #2 kdy: 29. 04. 2014, 21:30:59 »
Tiež nepoužívam, ale po rýchlom nazretí do dokumentácie bude IMHO ešte pomocou setopt potreba nastaviť, kam sa zapíše response po vykonaní perform - ten totiž nevracia response data - obdobne ako v example setopt (http://pycurl.sourceforge.net/doc/curlobject.html) takže asi:
Kód: [Vybrat]
import StringIO

def getPage(self, url):
c = pycurl.Curl()
c.setopt(pycurl.URL, url)
c.setopt(pycurl.HTTPHEADER, ['Accept:'])
c.setopt(pycurl.SSL_VERIFYPEER, 0)
response = StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, response.write)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.perform()
return response.getvalue()

DrevenaOhrada

Re:Python JSON NoneType
« Odpověď #3 kdy: 29. 04. 2014, 21:35:01 »
Mockrát děkuji za nakopnutí, už to funguje. Mockrát děkuji :)