我正在运行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中使用json
或simplejson
,我是否遗漏了一些明显的东西?
答案 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)
您的路径中是否有一个名为json
或simplejson
的文件,而不是这两个库中的一个?如果你这样做,那么python将加载该文件而不是真正的库。
答案 3 :(得分:5)
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