Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解析Python请求的JSON响应?_Python_Python Requests - Fatal编程技术网

如何解析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__)