Python JSON模块没有属性'dumps'

问题描述 投票:29回答:8

我正在运行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有什么明显的缺点吗?

python json import simplejson attributeerror
8个回答
61
投票

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

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


18
投票

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

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

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


11
投票

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


5
投票

如何重现此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'>

3
投票

您可能在Python路径中有另一个名为“json”的脚本,您将意外导入该脚本。您可以通过重命名您控制下或使用的方法来解决此问题

from __future__ import absolute_import

1
投票

我创建了一个名为json.py的文件。当我运行这个时,我得到了错误,所以我重命名它并为我说话。


1
投票

即使我在运行json.dump()时遇到类似的错误。在我的情况下,我收到一个错误字符串:

AttributeError:'file'对象没有属性'dump'

我是如何修理它的 -

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.