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?

25
demandé sur Eric Leschinski 2012-07-07 01:15:00

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.

54
répondu Paulo SantAnna 2014-12-06 00:48:08

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!

18
répondu Alex Reynolds 2012-07-06 21:24:28

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.

9
répondu guidoism 2012-07-06 21:19:03

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'>
4
répondu Eric Leschinski 2014-12-06 00:45:33

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
3
répondu Chris Lamb 2013-02-27 17:30:29

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.

1
répondu zhao 2018-07-26 12:48:45

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.

0
répondu Mike O'Connor 2013-11-20 14:04:23

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.

0
répondu Pravin Junnarkar 2018-08-30 09:17:42