2016-02-20 208 views
1

我有一個端點,我發佈數據。Python - 解析請求響應

r = requests.post(url, data=data, headers=headers) 

我得到在Javascript以下響應: -

throw 'allowScriptTagRemoting is false.'; 
(function() { 
    var r = window.dwr._[0]; 
    //#DWR-INSERT 
    //#DWR-REPLY 
    r.handleCallback("1", "0", { 
     msg: "", 
     output: { 
      msg: "Showing from city center", 
      resultcode: 1, 
      scrpresent: true, 
      srclatitude: "28.63244546123956", 
      srclongitude: "77.21981048583984", 
     }, 
     result: "success" 
    }); 
})(); 

如何解析響應?我基本上想要output json。你可以得到一樣的嗎?

+1

正則表達式和json.loads –

回答

1

問題是 - output不是有效的JSON字符串,無法通過json.loads()加載。

我將使用正則表達式來定位output對象,然後使用findall()來定位鍵值對。示例工作代碼:

import re 


data = """ 
throw 'allowScriptTagRemoting is false.'; 
(function() { 
    var r = window.dwr._[0]; 
    //#DWR-INSERT 
    //#DWR-REPLY 
    r.handleCallback("1", "0", { 
     msg: "", 
     output: { 
      msg: "Showing from city center", 
      resultcode: 1, 
      scrpresent: true, 
      srclatitude: "28.63244546123956", 
      srclongitude: "77.21981048583984", 
     }, 
     result: "success" 
    }); 
})(); 
""" 
output_str = re.search(r"output: (\{.*?\}),\n", data, re.DOTALL | re.MULTILINE).group(1) 

d = dict(re.findall(r'(\w+): "?(.*?)"?,', output_str)) 
print(d) 

打印:

{'msg': 'Showing from city center', 'resultcode': '1', 'srclongitude': '77.21981048583984', 'srclatitude': '28.63244546123956', 'scrpresent': 'true'}