web-dev-qa-db-fra.com

JSONDecodeError: valeur attendue: ligne 1 colonne 1

Je reçois cette erreur dans Python 3.5.1.

json.decoder.JSONDecodeError: valeur attendue: ligne 1 colonne 1 (caractère 0)

Voici mon code:

import json
import urllib.request

connection = urllib.request.urlopen('http://python-data.dr-chuck.net/comments_220996.json')

js = connection.read()

print(js)

info = json.loads(str(js))

 image

15
beeny

Si vous regardez la sortie que vous recevez de print() et que vous voyez également dans votre trace, vous verrez que la valeur que vous récupérez n'est pas une chaîne, mais un objet bytes (préfixé par b):

b'{\n  "note":"This file    .....

Si vous récupérez l'URL à l'aide d'un outil tel que curl -v, vous verrez que le type de contenu est

Content-Type: application/json; charset=utf-8

C'est donc JSON, codé en UTF-8, et Python considère qu'il s'agit d'un flux d'octets, pas d'une simple chaîne. Afin d'analyser cela, vous devez d'abord le convertir en chaîne.

Changez la dernière ligne de code en ceci:

info = json.loads(js.decode("utf-8"))
21
Dan Lowe

dans mon cas, certains caractères comme ",:" '{} [] "peuvent corrompre le format JSON, utilisez essayez json.loads (str) sauf pour vérifier votre entrée

1
Andy Yuan