40

dictPython 2.7 (x64 Linux) を実行していて、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

4

10 に答える 10

82

同様の問題がありましたが、別のカスタム モジュールが原因でした。別のスクリプトに名前を付け json.pyたところ、カスタム json.py ファイルをモジュールとしてロードしようとしたことがわかりました。dumps メソッドは明らかに利用できません。

json.py スクリプトの名前を別の名前 (json2.py) に変更すると、問題が解消されました。

于 2012-11-28T18:55:40.670 に答える
20

json古いPythonインストールからロードされた古いライブラリがあることが判明しました:

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

その古いものを削除すると、問題が修正されました。ありがとう!

于 2012-07-06T21:24:28.157 に答える
13

これらの 2 つのライブラリのいずれでもない、jsonまたはという名前のファイルがパスにありますか? simplejsonその場合、python は実際のライブラリの代わりにそのファイルをロードします。

于 2012-07-06T21:19:03.907 に答える
7

この python エラーを再現する方法:

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

おそらく、python の から到達可能な json.py というファイルを作成しましたsys.path。または、json.py というファイルを含むディレクトリを python の sys.path に追加しました。

オプション 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'

オプション 2: 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'>
于 2014-12-06T00:45:33.077 に答える
5

Python パスに "json" という別のスクリプトが含まれている可能性がありますが、これを誤ってインポートしている可能性があります。これは、管理下にある名前を変更するか、次を使用することで解決できます

from __future__ import absolute_import
于 2013-02-27T17:30:29.240 に答える
5

json.py. エラーが発生したため、ファイル名に名前を付けました。

AttributeError: 部分的に初期化されたモジュール 'json' に属性 'dumps' がありません (循環インポートが原因である可能性が最も高い)。

json1.py新しいファイルを作成する代わりに、ファイル名を に変更しました。

それが役に立てば幸い

于 2020-04-07T17:32:56.543 に答える
0

このエラーは別のコンテキストで発生しましたが、まだ json という名前の 2 つのものの 1 つです。私は Django (HTTP リクエストへのレスポンスを準備する Python 関数) で「ビュー」と名付けました。この場合は、json 形式のデータのリクエストを処理するビューです。

しかし、ビューに「json」という名前を付けました。動きが悪い。print dir(json) がビュー「json」でダンプのない応答を返したのに、同様のビューで属性として「ダンプ」が表示されたとき、私は戸惑いました。

この議論は私にとって問題を解決しました。

于 2013-11-20T14:04:23.620 に答える