Модуль 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" для файлового дескриптора в том же скрипте, поэтому я получал эту ошибку. Поэтому я просто переименовал это имя переменной и проблема решена.