Модуль Python JSON не имеет атрибута "дампы"

я запускаю Python 2.7 (x64 Linux) и пытаюсь преобразовать dict к объекту JSON.

>>> import sys
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=0, releaselevel='final', serial=0)

Я пытаюсь использовать simplejson (возвращаясь к json из стандартной библиотеки), но я получаю следующую ошибку:

>>> 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' 

есть ли что-то очевидное, что мне не хватает в использовании json или simplejson С Python 2.7?

8 ответов


были аналогичные проблемы, это было вызвано другим пользовательским модулем. Я назвал другой сценарий json.py и оказывается, он пытался загрузить пользовательский json.py файл как модуль. метод dumps, очевидно, недоступен там.

переименование json.py сценарий к чему-то другому (json2.py) избавился от проблемы.


оказалось, что у меня был старый json библиотека загружена из старой установки Python:

>>> import json                                                                                                                                                                                                                                                                           
>>> print json.__file__                                                                                                                                                                                                                                                                   
/home/areynolds/opt/lib/python2.5/site-packages/json.pyc

удаление этого старого материала исправило проблему. Спасибо!


у вас есть файл с именем json или simplejson на вашем пути это не одна из этих двух библиотек? Если вы это сделаете, python загрузит этот файл вместо реальной библиотеки.


как воспроизвести эту ошибку python:

AttributeError: 'module' object has no attribute 'dumps'

вероятно, вы создали файл под названием json.py это было доступно из sys.path. Или вы добавили каталог в систему python.путь, включающий файл с именем json.py.

Вариант 1: яд хорошо импортируя json, затем импортируя другой модуль с тем же псевдонимом:

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'

Вариант 2: яд хорошо создать файл называется json.py в пути python:

создать новый файл json.py-оставь это. Поместите туда этот код:

def foo():
  print "bar"

откройте терминал python и импортируйте 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

он говорит вам, что вашего метода там нет. Поэтому попросите python рассказать вам больше о природе этого модуля, и вы найдете подсказки о том, кто его отравил.

>>> print json
<module 'json' from 'json.py'>
>>> dir(json)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'foo']
>>> type(json)
<type 'module'>

у вас может быть другой скрипт в вашем пути Python под названием "json", который вы импортируете случайно. Вы можете решить эту проблему, переименовав тот, который находится под вашим контролем, или используя

from __future__ import absolute_import

Я создаю файл с именем json.py - ... Когда я запускаю это, я получаю ошибку, поэтому я переименовываю его, и это слова для меня.


эта ошибка только что произошла для меня в другом контексте, но все же одна из двух вещей с именем json. Я назвал "представление" в Django (функция Python, которая готовит ответ на HTTP-запрос), в этом случае представление для обработки запроса данных в формате json.

но я назвал представление "json". Плохой ход. Я был озадачен, когда print dir (json) вернул ответ без дампов в моем представлении "json", тогда как он показал" дампы " как атрибут в аналогичном представлении, что работал.

Это обсуждение исправило проблему для меня.


даже я столкнулся с подобной ошибкой при запуске json.свалка.)( В моем случае я получал строку ошибки:

AttributeError: объект "file" не имеет атрибута "dump"

Как я это исправил -

Я использовал имя переменной как "json" для файлового дескриптора в том же скрипте, поэтому я получал эту ошибку. Поэтому я просто переименовал это имя переменной и проблема решена.