json格式如下:
{
'success': True,
'result': {
'codeInfo': {
'code': 0,
'msg': '成功'
},
'uploadToken': {
'resId': 'rzJRpo',
'endpoint': 'https://sit-api-ypsx-resource.ypsx-internal.com/resource/upload',
'type': 'cos',
'params': '{"token":"2jvwiqjxzmw2dgh2zrf8cmi12cuzi2ww"}'
}
},
'traceId': '1aad51a05a5593282251ce3d9c8eaf16'
}
如果想要提取token的值,按照jsonpath的写法应该是
dtoken=jsonpath.jsonpath(res,'$..params[0].token')[0]
但是运行的时候报错
通过错误用法可以看到,按照这个表达式进行提取的时候出现布尔类型的值代表着并没有提取到数据,这个时候我们可以把上面的数据复制到json转换工具中进行转换,发现报错
可以看到提取的token里面的值并不是json格式,所以使用jsonpath提取报错,所以可以先提取到params的值,然后将提取的值转换成字典格式然后按照字典的取值逻辑获取token的值
idtoken=jsonpath.jsonpath(res,'$..params')[0]
print(idtoken)
idtoken1=json.loads(idtoken)['token']
print(idtoken1)
综上所述,对于jsonpath提取数据的时候也要看提取的数据的类型是不是混合模式,如果是混合模式,需要指定数据进行处理以后再进行提取