Le module JSON de Python n'a pas d'attribut 'dumps'
j'exécute Python 2.7 (x64 Linux) et j'essaie de convertir un dict
pour un objet JSON.
>>> import sys
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=0, releaselevel='final', serial=0)
je suis en train d'utiliser simplejson
(retomber json
à partir de la bibliothèque standard), mais j'obtiens l'erreur suivante:
>>> try: import simplejson as json
... except ImportError: import json
...
>>> metadata = dict()
>>> metadata['foo'] = 'bar'
>>> print metadata
{'foo': 'bar'}
>>> json.dumps(metadata)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'dumps'
est-ce qu'il y a quelque chose d'évident que je manque en utilisant json
ou simplejson
avec Python 2.7?
8 réponses
avait un problème similaire, il a été causé par un autre module personnalisé. J'ai nommé un autre script
json.py
et il s'avère qu'il a tenté de charger la coutume json.py fichier en tant que module. décharges méthode n'est évidemment pas disponible.
Renommer le json.py script pour quelque chose d'autre (json2.py) se débarrasser de la question.
s'est avéré que j'avais un vieux json
bibliothèque chargée à partir d'une ancienne installation de Python:
>>> import json
>>> print json.__file__
/home/areynolds/opt/lib/python2.5/site-packages/json.pyc
enlever ce vieux truc a réglé le problème. Merci!
avez-vous un fichier nommé json
ou simplejson
sur votre chemin, ce n'est pas une de ces deux bibliothèques? Si vous le faites, alors python chargera ce fichier au lieu de la bibliothèque réelle.
comment reproduire cette erreur de python:
AttributeError: 'module' object has no attribute 'dumps'
vous avez probablement créé un fichier appelé json.py c'était accessible depuis python!--5-->. Ou vous avez ajouté un répertoire au système de votre python.chemin qui incluait un fichier appelé json.py.
Option 1: empoisonner le puits en important json, puis en important un autre module avec le même alias:
eric@dev /var/www/sandbox/eric $ python
>>> import json
>>> json.dumps([])
'[]'
>>> import sys as json
>>> json.dumps([])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'dumps'
Option 2: empoisonner le puits en créant un fichier appelé json.py dans le python path:
créer un nouveau fichier json.py laisse tomber. Mettez ce code là:
def foo():
print "bar"
Ouvrir le python terminal et l'importation de json:
eric@dev /var/www/sandbox/eric/wsgi $ python
>>> import json
>>> type(json)
<type 'module'>
>>> json.dumps([])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'dumps'
>>> json.foo()
bar
il vous dit que votre méthode n'est pas là. Alors demandez à python de vous en dire plus sur la nature de ce module et vous trouverez des indices quant à qui l'a empoisonné.
>>> print json
<module 'json' from 'json.py'>
>>> dir(json)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'foo']
>>> type(json)
<type 'module'>
Vous pouvez avoir un autre script dans votre chemin Python appelé "json", que vous importez par accident. Vous pouvez résoudre ce problème en renommant celui qui est sous votre contrôle ou en utilisant
from __future__ import absolute_import
je crée un fichier nommé json.py. Quand j'ai lancé ceci j'ai eu l'erreur, j'ai donc renommer et il des mots pour moi.
cette erreur vient de se produire pour moi dans un contexte différent, mais toujours une des deux choses nommées json. J'avais nommé une" vue " dans Django (une fonction Python qui prépare une réponse à une requête HTTP), dans ce cas une vue pour traiter une requête de données au format json.
mais j'avais nommé la vue "json". Mauvais coup. J'ai été mystifié quand print dir (json) retourné une réponse sans dumps dans ma vue "json" alors qu'il a montré "dumps" comme un attribut dans une vue similaire que travaillé.
cette discussion a résolu le problème pour moi.
même moi je faisais face à une erreur similaire en exécutant json.dump.)( Dans mon cas, j'ai été faire une chaîne d'erreur :
AttributeError: 'fichier' objet n'a pas d'attribut 'dump'
Comment je fixe -
j'utilisais le nom de variable comme "json" pour le descripteur de fichier dans le même script, c'est pourquoi j'ai eu cette erreur. Donc j'ai simplement renommé cette variable nom et Problème résolu.