2014-09-29 16 views
8

Tôi đang cố gắng phân tích cú pháp một số response.text mà tôi nhận được khi tạo một request bằng cách sử dụng thư viện Yêu cầu Python. Ví dụ:Làm cách nào để phân tích cú pháp phản hồi JSON từ Yêu cầu 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 

Khi tôi thực hiện phương pháp này, đầu ra là:

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

Tôi muốn kiểm tra xem "result" bằng "success", bỏ qua bất cứ điều gì đến trước.

Trả lời

7

Các manual gợi ý: if self.response.status_code == requests.codes.ok:

Nếu điều đó không hoạt động:

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

Kể từ khi đầu ra, response, dường như là một từ điển, bạn sẽ có thể để làm

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

và có nó in

'success' 
+0

'phản hồi' là đối tượng 'Phản hồi' không có thuộc tính 'get'. Tôi đã cố gắng để phân tích cú pháp "thủ công" 'response.text' như một chuỗi và hoạt động tốt, nhưng tôi nghĩ rằng nó không phải là một cách tốt để làm điều đó – horro

+1

ok, tôi vừa thấy ngay bây giờ cập nhật; nó hoạt động tốt theo cách này – 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

Tôi tìm thấy giải pháp khác. Không cần sử dụng mô-đun json. Bạn có thể tạo một dict sử dụng dict = eval(whatever) và trả lại, ví dụ: dict["result"]. Tôi nghĩ nó thanh lịch hơn. Tuy nhiên, các giải pháp khác cũng hoạt động và chính xác là

+0

'eval()' 'ing một phản ứng api ngẫu nhiên (không tin cậy) có vẻ giống như một ý tưởng khủng khiếp an ninh khôn ngoan. –

Các vấn đề liên quan