У модуля Python JSON нет атрибутов 'dumps'
Я запускаю 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?
Ответы
Ответ 1
Оказалось, что у меня была старая библиотека json
, загруженная из старой установки Python:
>>> import json
>>> print json.__file__
/home/areynolds/opt/lib/python2.5/site-packages/json.pyc
Удаление старого материала исправило проблему. Спасибо!
Ответ 2
Имели похожие проблемы, это было вызвано другим настраиваемым модулем. Я назвал еще один script
json.py
, и, оказывается, он попытался загрузить пользовательский файл json.py в качестве модуля. метод дампов, очевидно, там недоступен.
Переименование json.py script на что-то другое (json2.py) избавилось от проблемы.
Ответ 3
У вас есть файл с именем json
или simplejson
в вашем пути, который не является одной из этих двух библиотек? Если вы это сделаете, тогда python загрузит этот файл вместо реальной библиотеки.
Ответ 4
Как воспроизвести эту ошибку python:
AttributeError: 'module' object has no attribute 'dumps'
Возможно, вы создали файл json.py, доступный из python sys.path
. Или вы добавили каталог в свой sys.path python, который включал файл json.py.
Вариант 1: Отравить колодец путем импорта json, а затем импортировать другой модуль с тем же псевдонимом:
[email protected] /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:
[email protected] /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'>
Ответ 5
У вас может быть еще один script в вашем пути Python под названием "json", который вы импортируете случайно. Вы можете решить это, переименовав один из них под свой контроль или используя
from __future__ import absolute_import
Ответ 6
Эта ошибка произошла только для меня в другом контексте, но все же одна из двух вещей, названная json. Я назвал "представление" в Django (функция Python, которая готовит ответ на HTTP-запрос), в этом случае представление для обработки запроса данных в формате json.
Но я назвал представление "json". Плохой ход. Я был озадачен, когда print dir (json) вернул ответ "без отвала" на мой взгляд "json", тогда как он показал "дампы" как атрибут в схожем виде, которое сработало.
В этом обсуждении для меня была проблема.