2014-09-29 17 views
8

Sto cercando di analizzare uno response.text che ottengo quando creo un request utilizzando la libreria Richieste Python. Per esempio:Come analizzare una risposta JSON dalle richieste Python?

def check_user(self): 
    method = 'POST' 
    url = 'http://localhost:5000/login' 
    ck = cookielib.CookieJar() 
    self.response = requests.request(method,url,data='username=test1&passwd=pass1', cookies=ck) 
    print self.response.text 

Quando eseguo questo metodo, l'output è:

{"request":"POST /login","result":"success"} 

Vorrei verificare se "result" uguale "success", ignorando ciò che viene prima.

risposta

7

Il manual suggerisce: if self.response.status_code == requests.codes.ok:

Se ciò non funziona:

if json.loads(self.response.text)['result'] == 'success': 
    whatever() 
1

Dato che l'uscita, response, sembra essere un dizionario, si dovrebbe essere in grado di fare

result = self.response.json().get('result') 
print(result) 

e lo hanno stampare

'success' 
+0

'response' è un oggetto 'Response' che non ha attributo 'get'. Ho provato ad analizzare "manualmente" 'response.text' come una stringa e funziona bene, ma penso che non sia un buon modo per farlo – horro

+1

ok, ho appena visto in questo momento l'aggiornamento; funziona in questo modo – horro

1
import json 

    def check_user(self): 
     method = 'POST' 
     url = 'http://localhost:5000/login' 
     ck = cookielib.CookieJar() 
     response = requests.request(method,url,data='username=test1&passwd=pass1', cookies=ck) 

     #this line converts the response to a python dict which can then be parsed easily 
     response_native = json.loads(response.text) 

     return self.response_native.get('result') == 'success' 
2

Ho trovato un'altra soluzione. Non è necessario utilizzare il modulo json. È possibile creare un dict utilizzando dict = eval(whatever) e restituire, ad esempio, dict["result"]. Penso che sia più elegante. Tuttavia, anche le altre soluzioni funzionano e sono corrette

+0

'eval()' 'eseguire una risposta api casuale (non affidabile) sembra una terribile idea per quanto riguarda la sicurezza. –

Problemi correlati