2015-09-19 17 views
6

辞書のレスポンスオブジェクトから値を取得しようとしていますが、このエラーが発生していますが、間違っていますか?__getitem__クラスでの索引付け?ここでTypeError: 'レスポンス'オブジェクトに属性 '__getitem__'がありません

はコードです:

import json 
import requests 
from requests.auth import HTTPBasicAuth 

url = "http://public.coindaddy.io:4000/api/" 
headers = {'content-type': 'application/json'} 
auth = HTTPBasicAuth('rpc', '1234') 

payload = { 
    "method": "get_running_info", 
    "params": {}, 
    "jsonrpc": "2.0", 
    "id": 0, 
} 

response = requests.post(url, data=json.dumps(payload), headers=headers, auth=auth) 


print("respone is: ", response['result']) 

答えて

8

応答オブジェクトが辞書ではありません、あなたはそれにインデックスを使用することはできません。

APIはJSON responseを返す場合、あなたはPythonオブジェクトにそれをデコードするresponse.json() methodを使用する必要があります。あなたはどちらかの要求JSONデータをエンコードする必要はありません

data = response.json() 
print("respone is: ", data['result']) 

注意。ここでrequest.post()メソッドへの引数をjsonだけ使用することができます。これはまた、あなたのためのContent-Typeヘッダを設定します。少なくとも

response = requests.post(url, json=payload, auth=auth) 

最後になりましたが、APIは、プロトコルとしてJSONRPCを使用している場合、プロキシメソッドにjsonrpc-requests projectを使用することができ、あなたのために呼び出します。

from jsonrpc_requests import Server 

url = "http://public.coindaddy.io:4000/api/" 
server = Server(url, auth=('rpc', '1234')) 

result = server.get_running_info() 
+0

明確な説明のためにありがとう – cyclopse87

+0

もし私が+2私は本当にこの答えの友達に感謝します。 – cyclopse87

1

はちょうどあなたのソースコードを変更するには、この

応答= requests.postのようなビット(URL、JSON = json.dumps(ペイロード)、ヘッダ=ヘッダ、AUTH = AUTH).json()

応答オブジェクトだけでインデックスを作成することはできませんが、その目的のために情報を返す必要があります。 json()と を使用して行うことができるjson形式(順番に解析情報)です。ここで適切な文字列を取得するには、utf-8でエンコードする必要があります(これ以外の出力は-u'LikeThisのようになります)

+0

他の人のように説明を追加する必要があります。 – badiya

+0

確かに、このエラーが発生しました。後ほど詳しく説明します。 –

関連する問題