2016-07-11 26 views
5

スニペットはAttributeError: 'str' はオブジェクトが属性 '負荷' を持っていない、json.loads()

import json 
    teststr = '{"user": { "user_id": 2131, "name": "John", "gender": 0, "thumb_url": "sd", "money": 23, "cash": 2, "material": 5}}' 
    json = json.load(teststr) 

は、例外の問題を解決する方法

Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
AttributeError: 'str' object has no attribute 'loads' 

を投げますか?

+0

詳細を教えてください - これはJSですか?あなたはスナップされたリンクを与えることができますか? –

+3

負荷の代わりに負荷を試してください –

+2

エラーメッセージがあなたの例と一致しません。 'json.loads'は直接入力の一部として呼び出されません。偶然JSONデータ文字列を 'json'という名前にバインドしましたか? – MisterMiyagi

答えて

13

json.loadはファイルポインタを受け取り、文字列を渡しています。あなたはおそらくjson.loadsを使用して、最初のパラメータとして文字列を取ります。あなたがimport json、あなたはそれが完全に意図的でない限り、それを上書きしないように注意しなければならない第二

、:json = json.load(teststr)< - バート。 これは、直前にインポートしたモジュールを上書きし、モジュールへの今後の呼び出しで実際に作成されたdictへの関数呼び出しを行います。この問題を解決するには

、あなたは別の変数一度ロード使用することができます:あなたは

import json as JSON 
teststr = '{"user": { "user_id": 2131, "name": "John", "gender": 0, "thumb_url": "sd", "money": 23, "cash": 2, "material": 5}}' 
json = JSON.loads(teststr) 

ORあなたは、具体的にインポートすることができますをインポートしているモジュール名を変更することができます

import json 
teststr = '{"user": { "user_id": 2131, "name": "John", "gender": 0, "thumb_url": "sd", "money": 23, "cash": 2, "material": 5}}' 
jsonstr = json.loads(teststr) 

ORをモジュールから使用する関数

from json import loads 
teststr = '{"user": { "user_id": 2131, "name": "John", "gender": 0, "thumb_url": "sd", "money": 23, "cash": 2, "material": 5}}' 
json = loads(teststr) 
+1

または 'import json as jamison' + 1 – dsgdfg

+0

私のお気に入りは、最も明確で制限的な(つまり、あなたが使用しない、あるいは間違って上書きする関数を持つグローバルな名前空間を汚染する)最後のバージョンです。 –