Python JSON模块没有属性'dumps'

时间:2012-07-06 21:15:01

标签: python json import simplejson attributeerror

我正在运行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' 

对于在Python 2.7中使用jsonsimplejson,我是否遗漏了一些明显的东西?

11 个答案:

答案 0 :(得分:61)

有类似的问题,它是由另一个自定义模块引起的。我命名了另一个脚本 json.py并且事实证明它试图将自定义json.py文件作为模块加载。那里显然没有转储方法。

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

答案 1 :(得分:18)

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

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

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

答案 2 :(得分:11)

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

答案 3 :(得分:5)

如何重现此python错误:

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

您可能创建了一个名为json.py的文件,该文件可以从python的sys.path访问。或者你在python的sys.path中添加了一个目录,其中包含一个名为json.py的文件。

选项1:Poison the well导入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:Poison the well在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'>

答案 4 :(得分:3)

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

来解决此问题
from __future__ import absolute_import

答案 5 :(得分:3)

我的错误是我将文件名命名为json.py. 我得到了错误:

AttributeError:部分初始化的模块'json'没有属性 “转储”(很可能是由于循环进口)。

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

希望有帮助

答案 6 :(得分:1)

我创建一个名为json.py的文件。 运行此命令时出现错误, 所以我给它重新命名,并用它来表达我的意思。

答案 7 :(得分:1)

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

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

我如何解决-

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

答案 8 :(得分:1)

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

问题::当您在python上调用import函数时,python会尝试在您的工作目录中查找该模块,如果在本地目录中找不到该模块,则它将在该目录中查找标准库和其他全球回购协议。因此,如果您尝试导入json模块,则它将尝试在目录中找到它;如果您有一个名为“ json.py”的文件,则python将加载此模块并尝试在json中查找“ dump”函数.py。如果在文件内找不到'dump'函数,它将抛出一个错误的'module'对象没有属性'dumps'。

解决方案:将您的“ json.py”文件重命名为其他名称:例如json_file.py或除“ json.py”外的任何其他内容。

答案 9 :(得分:0)

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

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

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

答案 10 :(得分:0)

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

pip uninstall json_extensions