Je reçois une erreur Expecting value: line 1 column 1 (char 0)
en essayant de décoder JSON.
L'URL que j'utilise pour l'appel d'API fonctionne bien dans le navigateur, mais donne cette erreur lorsqu'elle est effectuée via une demande de boucle. Voici le code que j'utilise pour la demande curl.
L'erreur se produit à return simplejson.loads(response_json)
response_json = self.web_fetch(url)
response_json = response_json.decode('utf-8')
return json.loads(response_json)
def web_fetch(self, url):
buffer = StringIO()
curl = pycurl.Curl()
curl.setopt(curl.URL, url)
curl.setopt(curl.TIMEOUT, self.timeout)
curl.setopt(curl.WRITEFUNCTION, buffer.write)
curl.perform()
curl.close()
response = buffer.getvalue().strip()
return response
Traceback complet:
Traceback:
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/Users/nab/Desktop/pricestore/pricemodels/views.py" in view_category
620. apicall=api.API().search_parts(category_id= str(categoryofpart.api_id), manufacturer = manufacturer, filter = filters, start=(catpage-1)*20, limit=20, sort_by='[["mpn","asc"]]')
File "/Users/nab/Desktop/pricestore/pricemodels/api.py" in search_parts
176. return simplejson.loads(response_json)
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/__init__.py" in loads
455. return _default_decoder.decode(s)
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/decoder.py" in decode
374. obj, end = self.raw_decode(s)
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/decoder.py" in raw_decode
393. return self.scan_once(s, idx=_w(s, idx).end())
Exception Type: JSONDecodeError at /pricemodels/2/dir/
Exception Value: Expecting value: line 1 column 1 (char 0)
simplejson
quand vous pouvez simplement utiliser le stdlib json
(qui est la même bibliothèque quesimplejson
)?
web_fetch()
appel a échoué.
pycurl
. requests
offre une API beaucoup plus facile, surtout quand il s'agit de déboguer ce qui se passe. Sauf si vous devez spécifiquement avoir une version plus récente de la simplejson
bibliothèque, restez avec json
, vous évite une dépendance à gérer.
response_json
la valeur de retour de .json()
? Vous disposez alors déjà de données décodées et vous n'avez plus besoin de les utiliser json.loads()
. response
l'a décodé pour vous.
print repr(response_json)
vous dit que vous êtes passé.loads()
?