json_demo.py
'''
Json库的相关操作:
Json库总共提供有四个不同的功能函数:
dumps:默认不支持中文,如果想要显示中文,则需要将ensure_ascii设置为False
dump:获取普通数据,转为json格式,将其写入json文件之中,进行保存
loads
load:是针对json文件,获取文件内容,转换为python数据类型
json格式的数据其实就是str,只是说json在解析之后可以通过key来获取value,这是str不具备的能力。
在json库中,加s的方法是直接操作数据,不加s则是操作文件。
现在的接口传输数据,都是直接传输的json数据,不再依托于json文件。所以可以直接操作数据本身,而不用再通过文件获取数据了。
是否为json,要看请求头中的content type。或者最直观的方法,看接口文档。
'''
import json
# json.dumps:转换数据内容为json格式。也就是把python中的普通数据转变为json格式。是为了满足json数据传入的需求
# 转换为json格式时,需要数据满足基本的格式规范
# a = 1
# b = [1, 2, 3, 4]
# c = 'hcc'
# d = {
# 'name': 'hcc',
# 'age': 18
# }
# e = {
# 'name': '黄财财'
# }
# json_d = json.dumps(d)
# json_e = json.dumps(e, ensure_ascii=False)
# print(d)
# print(type(d))
# print(json_d)
# print(type(json_d))
# print(json_e)
# json.loads:与dumps相反,将json格式的内容转变为python数据类型
# json.loads处理普通的python数据内容,一定会报错
# a = "1,2,3,4,5"
b = {
"name": "hcc"
}
c = '{"name": "hcc"}'
d = '[1,2,3,4]'
loads_c = json.loads(c)
print(type(loads_c))
print(type(json.loads(d)))
print(loads_c['name'])
'''
res1.json()其实核心处理思路就是将res1.text调用了json.loads(),将text内容从json格式转变为python数据类型。
所以可以在json()调用过后通过key和下标来获取响应文本中的对应信息
'''
'''
json.dump()和json.load()其实和dumps与loads一样。只是说dump和load是针对json格式文件来实现的操作。
'''
jsonpath_demo.py
'''
jsonpath库,用于实现对json数据内容进行定位操作的
Jsonpath其实就是xpath一样的概念,只是换了一个表达式而已。
Jsonpath本身主要的用途在于获取响应结果中指定的value,用于做接口断言校验和关联数据的提取。
jsonpath专门用于操作json格式的数据
jsonpath总共需要传入两个参数,第一个为需要解析的数据对象,第二个参数为Jsonpath表达式
表达式:$..status
$ 表示根目录
.. 表示不考虑位置,只找符合条件的key
status 指定的key值
如果找到了,返回结果为list,因为定义的key可能有多个,所以结果统一以list进行返回,返回的内容为key的value
如果没有找到,返回结果为False。
'''
import json
import jsonpath
import requests
# 提取文本,用于处理响应结果的指定key内容的获取
def get_text(text, key):
text = json.loads(text)
values = jsonpath.jsonpath(text, key)
if values:
if len(values) == 1:
return values[0]
return values
# 1. 准备测试数据
# 定义接口的url
url = 'http://apihcc.fecmall.com/v1/account/login'
# 定义接口传入的数据
# body数据:并不是每一个请求都要有body信息,根据实际需要进行添加即可
data = {
'username': 'admin',
'password': 'admin123'
}
# headers数据:并不是每一个请求都要有头部信息,根据实际需要进行添加即可
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 '
'Safari/537.36'
# 'Content-Type': 'Application/json;charset=utf-8' # 设置请求数据为json格式
}
# 2. 模拟请求
res = requests.post(url=url, headers=headers, json=data)
print(res.text)
url1 = 'http://apihcc.fecmall.com/v1/languages'
# 请求参数
headers = {
'access-token': res.json()['access-token'] # 将login接口返回的access-token设置为languages接口的头部参数
}
res1 = requests.get(url=url1, headers=headers)
print(res1.text)
# print(res.text)
# Jsonpath解析json格式的内容
text = json.loads(res1.text)
# print(type(text))
# values = jsonpath.jsonpath(text, "$..name")
# print(values[1])
print(get_text(res1.text, '$..message'))