Python JSON模块没有属性'dumps'

Ale*_*lds 33 python import json 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)
Run Code Online (Sandbox Code Playgroud)

我试图使用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' 
Run Code Online (Sandbox Code Playgroud)

使用jsonsimplejson使用Python 2.7 时是否有一些明显的缺失?

Pau*_*nna 64

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

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


Ale*_*lds 19

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

>>> import json                                                                                                                                                                                                                                                                           
>>> print json.__file__                                                                                                                                                                                                                                                                   
/home/areynolds/opt/lib/python2.5/site-packages/json.pyc
Run Code Online (Sandbox Code Playgroud)

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


gui*_*ism 13

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


Eri*_*ski 6

如何重现此python错误:

AttributeError: 'module' object has no attribute 'dumps'
Run Code Online (Sandbox Code Playgroud)

您可能创建了一个名为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'
Run Code Online (Sandbox Code Playgroud)

选项2: 中毒在python路径中创建一个名为json.py的文件,以:

创建一个新文件json.py,保存它。将此代码放在那里:

def foo():
  print "bar"
Run Code Online (Sandbox Code Playgroud)

打开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
Run Code Online (Sandbox Code Playgroud)

它告诉您您的方法不存在。因此,让python告诉您有关此模块性质的更多信息,您会找到有关谁中毒的线索。

>>> print json
<module 'json' from 'json.py'>
>>> dir(json)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'foo']
>>> type(json)
<type 'module'>
Run Code Online (Sandbox Code Playgroud)


Chr*_*amb 5

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

from __future__ import absolute_import
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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

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

希望能帮助到你


小智 5

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

pip uninstall json_extensions
Run Code Online (Sandbox Code Playgroud)