Code Python pour charger des données depuis un fichier JSON long et compliqué :
with open(filename, "r") as f:
data = json.loads(f.read())
(note : la meilleure version du code devrait être :
with open(filename, "r") as f:
data = json.load(f)
mais les deux présentent un comportement similaire)
Pour de nombreux types d'erreurs JSON (délimiteurs manquants, barres obliques inversées incorrectes dans les chaînes, etc.), cette option imprime un message utile contenant le numéro de ligne et de colonne où l'erreur JSON a été trouvée.
Cependant, pour d'autres types d'erreurs JSON (dont la classique "utilisation d'une virgule sur le dernier élément d'une liste", mais aussi d'autres choses comme la capitalisation de true/false), le résultat de Python est juste :
Traceback (most recent call last):
File "myfile.py", line 8, in myfunction
config = json.loads(f.read())
File "c:\python27\lib\json\__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "c:\python27\lib\json\decoder.py", line 360, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "c:\python27\lib\json\decoder.py", line 378, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
Pour ce type de ValueError, comment faire pour que Python vous dise où se trouve l'erreur dans le fichier JSON ?
0 votes
Pouvez-vous nous donner un extrait de votre fichier ?
0 votes
Je n'essaie pas de trouver l'erreur dans un fichier particulier maintenant ; j'essaie de modifier mon programme pour qu'il mette en évidence l'erreur dans tout fichier futur qu'il lira.
2 votes
Ce n'est pas directement lié, mais vous pourriez simplement faire
json.load(f)
au lieu dejson.loads(f.read())
0 votes
@OJW quelle version de python a été ce comportement sur ?
1 votes
Python 3.8.1 donne maintenant la position d'erreur "Expecting value : line 1 column 21 (char 20)".
0 votes
L'erreur d'origine était la v2.7 comme indiqué dans le nom du répertoire ci-dessus.