最近做项目外部调用需要对url 做转码,因为开始再js 上直接做单次调用模拟均没有问题,移植python 就出现问题,发现python 和js 数据转换的时候还是存在问题。
例如数据为这样
[{"sku_no":"10304026","amount":"98.00","storage_code":"001"},{"sku_no":"11399053","amount":"218.00","storage_code":"001"},{"sku_no":"11503078","amount":"65.00","storage_code":"001"}]
js 中转换
但是python中 字典数据是不能直接转的需要做处理。
from urllib import parse
import json
data=[{"sku_no":"10304026","amount":"98.00","storage_code":"001"},{"sku_no":"11399053","amount":"218.00","storage_code":"001"},{"sku_no":"11503078","amount":"65.00","storage_code":"001"}]
#ensure_ascii=False这个是为了防止字段转换json数据后会出现"变为'这个部分外部接口会解析失败。
datajson = json.dumps(requestData, ensure_ascii=False)
values = parse.quote(datajson)
出来后的结果对比
%5B%7B%22sku_no%22%3A%2210304026%22%2C%22amount%22%3A98.00%2C%22storage_code%22%3A%22001%22%7D%2C%7B%22sku_no%22%3A%2211399053%22%2C%22amount%22%3A218.00%2C%22storage_code%22%3A%22001%22%7D%2C%7B%22sku_no%22%3A%2211503078%22%2C%22amount%22%3A65.00%2C%22storage_code%22%3A%22001%22%7D%5D
%5B%7B%22sku_no%22%3A%20%2210304026%22%2C%20%22amount%22%3A%2098.0%2C%20%22storage_code%22%3A%20%22001%22%7D%2C%20%7B%22sku_no%22%3A%20%2211399053%22%2C%20%22amount%22%3A%20218.0%2C%20%22storage_code%22%3A%20%22001%22%7D%2C%20%7B%22sku_no%22%3A%20%2211503078%22%2C%20%22amount%22%3A%2065.0%2C%20%22storage_code%22%3A%20%22001%22%7D%5D
对比后发现
转换之后会默认增加空格。
因此会调用失败。
上面的代码也需要做相应的调整:
#%20 就是里面的空格
values = parse.quote(datajson).replace("%20","")
这样出来后的数据就一致了。 再进MD5
加密或者调用都不会有问题。