2015-09-19 30 views
6

Bir sözlükteki bir yanıt nesnesinden bir değer elde etmeye çalışıyorum, ancak bu hatayı görmeye devam ediyorum, __getitem__ daha yaygın olarak kullanıldığını düşünürken yanılmışım Sınıflarda endeksleme?TypeError: 'Response' nesnesinin bir öznesi yok '__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']) 

cevap

8

tepki nesnesi üzerinde indeksleme kullanamaz, bir sözlük değildir: Burada

kodudur. API JSON response dönerse

, bir Python nesnesine deşifre response.json() method kullanmak gerekir: Eğer istek JSON verilerini kodlamak zorunda değilsiniz

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

Note ya; json argümanını sadece request.post() yöntemini kullanarak kullanabilirsiniz; Bu da sizin için Content-Type başlığını ayarlar: API protokolü olarak JSONRPC kullanıyorsa

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

Son olarak, proxy yöntemine jsonrpc-requests project kullanabilirsiniz sizin için çağırır:

from jsonrpc_requests import Server 

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

result = server.get_running_info() 
+0

Açıkladığım için teşekkürler – cyclopse87

+0

Eğer +2 olsaydı ben gerçekten bu cevap arkadaşı takdir ediyorum. – cyclopse87

1

Sadece kaynak kodunu değiştirmek bu

tepki = requests.post gibi biraz (url, json = json.dumps (yük), başlıklar = başlıkları auth = yetkilendirme) .json()

print ("respone is:", yanıt ['result']. Encode ('utf-8'))

Bu yanıt için tek başına yanıt nesnesinin dizine eklenemediği doğrudur. json formatını (parse yanıt bilgisi olarak) json() ve kullanarak yapabilirsiniz. Doğru dizgiyi elde etmek için, utf-8 ile kodlamak zorundasınız (diğer bilginiz çıktılarınız bu gibi olacak)

+0

da diğerleri gibi bir açıklama eklemelisiniz. – badiya

+0

Elbette, bugün bu hatayla karşılaştım, daha sonra daha iyi bir açıklama ekleyeceğim. –

İlgili konular