Модуль Python JSON не имеет атрибута «dumps»

Недавно я работал над старым проектом. Мне нужно было обновить нашу версию Newtonsoft.Json.dll, так как мне пришлось использовать «новый» API, который требовал новой версии, но у меня все еще были другие DLL, которые требовали старую версию.

bindingRedirect вы говорите? Неа. Он продолжал жаловаться на манифестное несоответствие.

Отдельные теги CodeBase? Неа. Он продолжал жаловаться на манифестное несоответствие.

Проблема заключалась, по-видимому, в том, что у старой версии Newtonsoft.Json.dll (3.0.0.0) не есть PublicKeyToken, но «новая» версия (4.5 .7.1) У нас есть PublicKeyToken. Поэтому они не могли использовать один и тот же зависимый тег-сборщик.

Это то, что у меня получилось:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="" culture="neutral"/>
    <codeBase version="3.0.0.0" href="bin\Newtonsoft_Old\Newtonsoft.Json.dll" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
    <codeBase version="4.5.0.0" href="bin\Newtonsoft.Json.dll" />
</dependentAssembly>
29
задан Eric Leschinski 6 December 2014 в 00:14
поделиться

9 ответов

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

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

Удаление этой старой вещи решило проблему. Спасибо!

18
ответ дан Alex Reynolds 6 December 2014 в 00:14
поделиться

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

11
ответ дан guidoism 6 December 2014 в 00:14
поделиться

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

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

62
ответ дан Eric Leschinski 6 December 2014 в 00:14
поделиться

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

from __future__ import absolute_import
3
ответ дан Chris Lamb 6 December 2014 в 00:14
поделиться

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

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

Вы, вероятно, создали файл с именем json.py, который был доступен из кода Python sys.path. Или вы добавили каталог в sys.path вашего питона, который включал файл с именем 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'>
5
ответ дан Eric Leschinski 6 December 2014 в 00:14
поделиться

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

1
ответ дан zhao 6 December 2014 в 00:14
поделиться

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

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

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

0
ответ дан Mike O'Connor 6 December 2014 в 00:14
поделиться

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

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

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

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

1
ответ дан Pravin Junnarkar 6 December 2014 в 00:14
поделиться

Я обсудил проблема и решение ниже

проблема: , когда Вы вызываете функцию импорта на Python, попытка Python найти модуль в Вашем рабочем каталоге, если это не находит в Вашем локальном каталоге, именно тогда это будет искать стандартные библиотеки и другой глобальный repos. Следовательно, при попытке импортировать json модуль, то затем он попытается найти его в Вашем каталоге и Если у Вас будет файл, названный 'json.py', то Python загрузит этот модуль и пытается найти функцию 'дампа' в Вашем json.py., если он не найдет функцию 'дампа' в Вашем файле, то он бросит ошибочный объект 'модуля', не имеет никакого атрибута 'дампы'.

Разрешение : переименуйте свой 'json.py' файл на другое имя: как json_file.py или что-либо кроме 'json.py'.

1
ответ дан 27 November 2019 в 17:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: