2022年 11月 8日

python处理requests库请求的json数据

一. 使用Python的requests库请求——响应结果处理

在实际工作中,很多接口的响应都是json格式的数据,需要对其进行处理和分析。涉及到json数据处理的方法有两种:序列化和反序列化:

python中 序列化——将python的字典转换成json格式字符串,以便进行储存或者传输;

反序列化——将json格式字符串转换成python字典,用于对其进行分析和处理。

JSON和DICT格式互转方法:

  1. import json
  2. # 序列化成json字符串
  3. d = {‘name':‘jod'}
  4. j = json.dumps(d)
  5. #反序列化成字典
  6. print json.loads(j)

而在requests库中,不用json.loads方法进行反序列化,而是提供了响应对象的json方法,用来对json格式的响应体进行反序列化:

r = requests.get(url)

r.json()

二. requests库返回的数据有两种方法可以处理:

    1.对requests发起请求返回的响应对象进行.json()操作,.json操作返回的是一个字典类型(如果返回的结果为空时则会报错),如下:

    2.对requests请求得到的响应对象中的text数据进行json.loads(text)操作,操作后返回的是字典类型(建议使用这种方法,使用前判断text是否为空,为空也会报错),如下:

   #  response.json()方法 同  json.loads(response.text)

三. 使用requests发送请求并处理返回的结果–基础模板

import requests
import json

# 以get方法进行请求,可以直接把参数附在后面,也可以传入参数进行
response=requests.get(f”http://XXXXX/anyq?question={question}”)
param={“question”:question}
res = requests.get(url=’https://b.faloo.com/l/0/1.html’,params=param)
# 这里形参为params

# 如果是post,可以以data形式作为参数进行
params = {“username”: self.username,”email”: self.email, “password”: self.password}
response = requests.post(request_url, data=params)

response = requests.post(request_url, json=params)
# 这里形参为data

# 需要传json类型参数,使用json 参数

# 如果返回的数据是unicode编码,例如

(python3将字符串unicode转换为中文)
“””
“answer\”:\”\u8bb2\u8bdd\u4ea4\u6d41\u6700\u5c11\u76f8\u96941\u7c73\uff0c\u6700\u597d2\u7c73\u3002 
\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u98de\u6cab\u4f20\u64ad\u53ea\u6709\u4e0e\u4f20\u67d3\u6
e90\u8fd1\u8ddd\u79bb\u63a5\u89e6\u65f6\u624d\u53ef\u80fd\u5b9e\u73b0\u3002\u98de\u6cab
“””

# 参考 https://www.cnblogs.com/573734817pc/p/10855147.html  进行解码
decode_rs=response.text.encode(“utf-8”).decode(‘unicode_escape’)

# 如果以json格式返回,直接使用json解析; 或者text- json.loads() 进行处理
json_rs=response.json()
print(json_rs)