我正在运行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
有什么明显的缺点吗?
有类似的问题,它是由另一个自定义模块引起的。我命名另一个脚本json.py
,事实证明它试图加载自定义json.py文件作为模块。转储方法显然不可用。
将json.py脚本重命名为其他内容(json2.py)可以解决问题。
原来我从旧的Python安装中加载了一个旧的json
库:
>>> import json
>>> print json.__file__
/home/areynolds/opt/lib/python2.5/site-packages/json.pyc
删除旧的东西解决了这个问题。谢谢!
你的路径中有一个名为json
或simplejson
的文件,它不是这两个库中的一个吗?如果你这样做,那么python将加载该文件而不是真正的库。
AttributeError: 'module' object has no attribute 'dumps'
您可能创建了一个名为json.py的文件,该文件可以从python的sys.path
访问。或者你在python的sys.path中添加了一个目录,其中包含一个名为json.py的文件。
选项1:通过导入json导入Poison the well,然后导入具有相同别名的另一个模块:
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'>
您可能在Python路径中有另一个名为“json”的脚本,您将意外导入该脚本。您可以通过重命名您控制下或使用的方法来解决此问题
from __future__ import absolute_import
我创建了一个名为json.py的文件。当我运行这个时,我得到了错误,所以我重命名它并为我说话。
即使我在运行json.dump()时遇到类似的错误。在我的情况下,我收到一个错误字符串:
AttributeError:'file'对象没有属性'dump'
我是如何修理它的 -
我在同一个脚本中使用变量名称作为文件描述符的“json”,这就是我收到此错误的原因。所以我只是重命名了变量名称并解决了问题。
我在不同的上下文中发生了这个错误,但仍然是两个名为json的东西之一。我在Django(一个准备响应HTTP请求的Python函数)中命名了一个“视图”,在这种情况下是一个处理json格式数据请求的视图。
但我把视图命名为“json”。不好的举动。当print dir(json)在我的视图“json”中返回无转储响应时我感到很神秘,而它在类似视图中显示“转储”作为属性起作用。
这个讨论为我解决了这个问题。