web-dev-qa-db-ja.com

奇妙なpython問題、 'unicode'オブジェクトに 'read'属性がありません

ここに私のコードがあり、誰かが何か間違っているアイデアを持っていますか?私は my JSON content をブラウザで直接開いて動作します、

data = requests.get('http://ws.audioscrobbler.com/2.0/?method=library.getartists&api_key=4c22bd45cf5aa6e408e02b3fc1bff690&user=joanofarctan&format=json').text
data = json.load(data)
print type(data)
return data

事前に感謝、リン

13
Lin Ma

このエラーは、dataがunicode/str変数であるために発生しました。コードの2行目を変更してエラーを解決します。

data = json.loads(data)

json.load最初のパラメーターの位置にあるファイルオブジェクトを取得し、これのreadメソッドを呼び出します。

また、応答のjsonメソッドを呼び出して、データを直接フェッチすることもできます。

response = requests.get('http://ws.audioscrobbler.com/2.0/?method=library.getartists&api_key=4c22bd45cf5aa6e408e02b3fc1bff690&user=joanofarctan&format=json')
data = response.json()
35
M.javid

requests.get(…).text は、コンテンツを単一の(Unicode)文字列として返します。 json.load() 関数には、ファイルのような引数が必要です。

解決策はかなり単純です。loadsの代わりに load を使用するだけです。

_data = json.loads(data)
_

ただし、さらに優れた解決策は、応答オブジェクトで直接 json() を直接呼び出すことです。したがって、_.text_ではなく.json()を使用してください。

_data = requests.get(…).json()
_

これは内部で_json.loads_自体を使用しますが、その実装の詳細を非表示にするため、JSON応答の取得に集中できます。

3
poke