一、python对象和json格式的对应关系
json | Python | |
---|---|---|
{} | 对象(object) | 字典(dict) |
[] | 数组(array) | 列表(list) |
字符串 | 字符串(string) | 字符串(str) |
整数 | 整数(int) | 整数(int) |
实数 | 实数(float) | 实数(float) |
布尔值 | true | True |
布尔值 | false | False |
空 | null | None |
二、json反序列化为Python
2.1 json.loads()操作字符串
使用json.loads()方法将json字符串转化为python对象
注:反序列化时原对象中的key和value需使用双引号包裹,否则报错
import json
case='''{
"id":1,
"title":"注册成功-不带昵称和类型",
"method":"post",
"url":"http://test.lemonban.com/futureloan/mvc/api/member/register",
"request_data":{"mobilephone":"13000450100","pwd":"12345678"},
"expect_data":{"code":"10001","msg":"注册成功"}
}'''
print(type(case),case)
case1=json.loads(case)
print(type(case1),case1)
2.2json.load()操作文件
使用json.load()方法以读方式打开json文件,将文件中的json数据反序列化为Python对象
import json
with open('test.json','r',encoding='utf-8') as f:
load_data=json.load(f)
print(load_data,type(load_data))
三、Python序列化为json
3.1json.dumps()转为json字符串
将一个python对象序列化为一个json格式的字符串
import json
data = {
"id":1,
"title":"注册成功-不带昵称和类型",
"method":"post",
"url":"http://test.lemonban.com/futureloan/mvc/api/member/register",
"request_data":{"mobilephone":"13000450100","pwd":"12345678"},
"expect_data":{"code":"10001","msg":"注册成功"}
}
json_str = json.dumps(data)
print(json_str,type(json_str))
3.2json.dump()转为json文件
将python对象序列化为josn数据后写入以w模块打开的文件
import json
data = {
"id":1,
"title":"注册成功-不带昵称和类型",
"method":"post",
"url":"http://test.lemonban.com/futureloan/mvc/api/member/register",
"request_data":{"mobilephone":"13000450100","pwd":"12345678"},
"expect_data":{"code":"10001","msg":"注册成功"}
}
with open('test.json','w',encoding='utf-8') as f:
json.dump(data,f)
四、jsonpath提取数据
4.1安装模块
pip install jsonpath
4.2通过字典键值对的方式获取token
import requests
url='http://{{ip}}/api/system/authUser/login'
data={
"username": "YWRtaW4=",
"password": "QWRtaW5AMTIz"
}
re=requests.post(url=url,json=data)
res=re.json()
print(res)
#{'msg': 'success', 'code': 200, 'data': {'tokenName': 'token', 'tokenValue': 'Nh_zkfm1CeAwxWEJ3_rfyNNXJzU3uf4BJq__', 'user': {'id': 2, 'username': 'admin', 'password': '******', 'name': '超级管理员', 'sex': '男'}}}
token=res['data']['tokenValue']
print(token)
4.3通过jsonpath提取
from jsonpath import jsonpath
import requests
url='http://192.168.1.185:30201/api/system/authUser/login'
data={
"username": "YWRtaW4=",
"password": "QWRtaW5AMTIz"
}
re=requests.post(url=url,json=data)
res=re.json()
print(res)
#{'msg': 'success', 'code': 200, 'data': {'tokenName': 'token', 'tokenValue': 'Nh_zkfm1CeAwxWEJ3_rfyNNXJzU3uf4BJq__', 'user': {'id': 2, 'username': 'admin', 'password': '******', 'name': '超级管理员', 'sex': '男'}}}
token=jsonpath(res,'$.data.tokenValue') #$.data.tokenValue与$..tokenValue均可
print(token,type(token))
jsonpath的语法:
jsonpath | 描述 |
---|---|
$ | 根节点 |
@ | 当前元素 |
. 或[] | 下一个节点 |
... | 不考虑位置,符合条件的元素 |
* | 匹配所有元素节点 |
[] | 数组下标,根据内容选值 |