如何解析Python请求的JSON响应?
我试图解析一个如何解析Python请求的JSON响应?,python,python-requests,Python,Python Requests,我试图解析一个响应。text,它是我使用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
响应。text
,它是我使用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
当我执行此方法时,输出为:
{“请求”:“发布/登录”,“结果”:“成功”}
我想检查“result”
是否等于“success”
,忽略前面的任何内容。由于输出response
似乎是一个字典,您应该可以这样做
result = self.response.json().get('result')
print(result)
把它打印出来
'success'
建议:如果self.response.status\u code==requests.code.ok:
如果这不起作用:
if json.loads(self.response.text)['result'] == 'success':
whatever()
我找到了另一个解决办法。无需使用json
模块。您可以使用dict=eval(无论什么)
创建一个dict
,并返回,例如,dict[“result”]
。我觉得它更优雅。但是,其他解决方案也可以使用,并且是正确的。将其放入方法的返回中,如下所示:
返回self.response.json()
如果要查看更多详细信息,请单击以下链接:
并搜索json()方法
下面是一个代码示例:
import requests
url = 'https://www.w3schools.com/python/demopage.js'
x = requests.get(url)
print(x.json())
如果响应是json格式的,则可以执行类似(python3)的操作:
要查看响应中的所有内容,可以使用。\uuuu dict\uuuu
:
print(response.__dict__)
在某些情况下,响应可能与预期一致。因此,如果我们能够构建一种机制来捕获和记录异常,那将是一件好事
导入请求
导入系统
url=”https://stackoverflow.com/questions/26106702/how-do-i-parse-a-json-response-from-python-requests"
response=requests.get(url)
尝试:
json_data=response.json()
除了作为exc的ValueError:
打印(f“异常:{exc}”)
#要了解出现此异常的原因,可以查看响应内容和标题
打印(str(response.content))
打印(str(response.headers))
打印(sys.exc_info())
其他:
如果json_data.get('result')=“成功”:
#你想干什么就干什么
通过
response
是一个没有属性“get”的“response”对象。我尝试将“手动”解析为字符串,效果很好,但我认为这不是一个好方法,我刚刚看到了更新;通过这种方式它工作得很好eval()
“随机(不受信任)api响应似乎是一个可怕的安全想法。@Matthijsbrons在这种情况下的威胁是什么?我这样问是因为我忽略了them@horoEval将把响应评估为有效的Python。通过使用它,您信任源不会在响应中注入恶意软件。@Matthijsbrons那么您如何解决这个安全问题呢?我的意思是,是否有一种安全明智的方法来评估响应?
import json
import requests as reqs
# Make the HTTP request.
response = reqs.get('http://demo.ckan.org/api/3/action/group_list')
# Use the json module to load CKAN's response into a dictionary.
response_dict = json.loads(response.text)
for i in response_dict:
print("key: ", i, "val: ", response_dict[i])
print(response.__dict__)