40

我正在运行 Python 2.7 (x64 Linux) 并尝试将 a 转换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在使用 Python 2.7或simplejson与 Python 2.7 一起使用时,我有什么明显的遗漏吗?

4

10 回答 10

82

有类似的问题,它是由另一个自定义模块引起的。我命名了另一个脚本 json.py,结果它试图将自定义 json.py 文件作为模块加载。dumps 方法显然在那里不可用。

将 json.py 脚本重命名为其他内容(json2.py)可以解决这个问题。

于 2012-11-28T18:55:40.670 回答
20

原来我json从旧的 Python 安装中加载了一个旧库:

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

删除旧的东西解决了这个问题。谢谢!

于 2012-07-06T21:24:28.157 回答
13

您是否有一个名为jsonsimplejson在您的路径中不是这两个库之一的文件?如果你这样做了,那么 python 将加载该文件而不是真正的库。

于 2012-07-06T21:19:03.907 回答
7

如何重现此 python 错误:

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

您可能创建了一个名为 json.py 的文件,该文件可从 python 的sys.path. 或者,您在 python 的 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: 通过在 python 路径中创建一个名为 json.py 的文件来毒化井:

新建文件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'>
于 2014-12-06T00:45:33.077 回答
5

您的 Python 路径中可能有另一个名为“json”的脚本,这是您意外导入的。您可以通过重命名您控制下的或使用

from __future__ import absolute_import
于 2013-02-27T17:30:29.240 回答
5

我犯的错误我在收到错误时命名了文件名json.py.

AttributeError:部分初始化的模块“json”没有属性“dumps”(很可能是由于循环导入)。

我将文件名重命名为,json1.py而不是创建新文件。

希望能帮助到你

于 2020-04-07T17:32:56.543 回答
3

我通过卸载我之前添加到项目中的 json_extension 库解决了同样的问题。

pip uninstall json_extensions
于 2021-03-10T16:13:47.410 回答
2

即使我在运行 json.dump() 时也遇到了类似的错误。就我而言,我收到了一个错误字符串:

AttributeError:“文件”对象没有属性“转储”

我是如何解决的-

我在同一个脚本中使用变量名作为文件描述符的“json”,这就是我收到此错误的原因。所以我只是重命名了该变量名并解决了问题。

于 2018-08-30T09:17:42.537 回答
2

我已经在下面讨论了问题解决方案

问题:当你在 python 上调用 import 函数时,python 会尝试在你的工作目录中找到该模块,如果在你的本地目录中没有找到,那么它将寻找标准库和其他全局 repos。因此,如果您尝试导入 json 模块,那么它会尝试在您的目录中找到它,如果您有一个名为“json.py”的文件,python 将加载该模块并尝试在您的 json 中找到“转储”函数.py。如果在文件中找不到“转储”功能,则会抛出错误“模块”对象没有属性“转储”。

解决方案:将您的“json.py”文件重命名为不同的名称:如 json_file.py 或除“json.py”以外的任何名称。

于 2019-08-12T12:47:48.967 回答
0

这个错误只是在不同的上下文中发生在我身上,但仍然是名为 json.json 的两件事之一。我在 Django 中命名了一个“视图”(一个准备对 HTTP 请求的响应的 Python 函数),在本例中是一个处理 json 格式数据请求的视图。

但我已将视图命名为“json”。不好的举动。当 print dir(json) 在我的视图“json”中返回一个无转储响应时,我感到很困惑,而它在类似的视图中将“dumps”显示为一个属性。

这次讨论为我解决了这个问题。

于 2013-11-20T14:04:23.620 回答