测试代码字典这里群里的提问:
大佬们,问个问题,python对字典进行url编码,编码出来的结果解码后是单引号,因为python默认是单引号,怎么让字典进行url编码的时候是双引号去进行编码的
注释:之前写过现在复习一下
学习文章:https://blog.csdn.net/mouday/article/details/82658908
import json
from urllib import parse
params = {
"msgBody": {
"data": {
"imgType": "",
"imgURL": "image url",
"imgLike": 0.5
}
},
"msgHead": {
"Token": "",
"Code": "",
"rmsg": "你好",
},
"mi":888
}
第一种:先for循环遍历一遍再求值
for k, v in params.items():
if isinstance(v, dict):
params[k] = json.dumps(v, separators=(',', ':'), ensure_ascii=False)
url = parse.urlencode(params)
print("进行编码后结果:r" + url)
print(parse.unquote_plus(url))
"""
进行编码后结果:
msgBody=%7B%27data%27%3A+%7B%27imgType%27%3A+%27%27%2C+%27imgURL%27%3A+%27image+url%27%2C+%27imgLike%27%3A+0.5%7D%7D&msgHead=%7B%27Token%27%3A+%27%27%2C+%27Code%27%3A+%27%27%2C+%27rmsg%27%3A+%27%E4%BD%A0%E5%A5%BD%27%7D&mi=888
msgBody={'data': {'imgType': '', 'imgURL': 'image url', 'imgLike': 0.5}}&msgHead={'Token': '', 'Code': '', 'rmsg': '你好'}&mi=888
进行编码后结果: 【前面加for循环】
msgBody=%7B%22data%22%3A%7B%22imgType%22%3A%22%22%2C%22imgURL%22%3A%22image+url%22%2C%22imgLike%22%3A0.5%7D%7D&msgHead=%7B%22Token%22%3A%22%22%2C%22Code%22%3A%22%22%2C%22rmsg%22%3A%22%E4%BD%A0%E5%A5%BD%22%7D&mi=888
msgBody={"data":{"imgType":"","imgURL":"image url","imgLike":0.5}}&msgHead={"Token":"","Code":"","rmsg":"你好"}&mi=888
"""
第二种:自个提取Value为字典的先序列化再求值
群友就是使用这种方式
params["msgBody"] = json.dumps((params["msgBody"]),separators=(',', ':'), ensure_ascii=False)
params["msgHead"] = json.dumps((params["msgHead"]),separators=(',', ':'), ensure_ascii=False)
url = parse.urlencode(params)
print("进行编码后结果:r" + url)
print(parse.unquote_plus(url))
"""
进行编码后结果:
msgBody=%7B%22data%22%3A%7B%22imgType%22%3A%22%22%2C%22imgURL%22%3A%22image+url%22%2C%22imgLike%22%3A0.5%7D%7D&msgHead=%7B%22Token%22%3A%22%22%2C%22Code%22%3A%22%22%2C%22rmsg%22%3A%22%E4%BD%A0%E5%A5%BD%22%7D&mi=888
msgBody={"data":{"imgType":"","imgURL":"image url","imgLike":0.5}}&msgHead={"Token":"","Code":"","rmsg":"你好"}&mi=888
"""
第三种:定义一个函数遍历一遍再求值
def test(_dict):
if not isinstance(_dict, dict):
print("错误")
for k, v in _dict.items():
if isinstance(v, dict):
_dict[k] = json.dumps(v, separators=(',', ':'), ensure_ascii=False)
return _dict
newParams = test(params)
url = parse.urlencode(newParams)
print("进行编码后结果:r" + url)
# print(parse.unquote_plus(url))
"""
进行编码后结果:
msgBody=%7B%22data%22%3A%7B%22imgType%22%3A%22%22%2C%22imgURL%22%3A%22image+url%22%2C%22imgLike%22%3A0.5%7D%7D&msgHead=%7B%22Token%22%3A%22%22%2C%22Code%22%3A%22%22%2C%22rmsg%22%3A%22%E4%BD%A0%E5%A5%BD%22%7D&mi=888
msgBody={"data":{"imgType":"","imgURL":"image url","imgLike":0.5}}&msgHead={"Token":"","Code":"","rmsg":"你好"}&mi=888
"""
第四种:使用字典推导式遍历再求值
newParams = {k: json.dumps(v, separators=(',', ':'), ensure_ascii=False) if isinstance(v, dict) else v for k, v in params.items()}
url = parse.urlencode(newParams)
print("进行编码后结果:r" + url)
print(parse.unquote_plus(url))
"""
进行编码后结果:
msgBody=%7B%22data%22%3A%7B%22imgType%22%3A%22%22%2C%22imgURL%22%3A%22image+url%22%2C%22imgLike%22%3A0.5%7D%7D&msgHead=%7B%22Token%22%3A%22%22%2C%22Code%22%3A%22%22%2C%22rmsg%22%3A%22%E4%BD%A0%E5%A5%BD%22%7D&mi=888
msgBody={"data":{"imgType":"","imgURL":"image url","imgLike":0.5}}&msgHead={"Token":"","Code":"","rmsg":"你好"}&mi=888
"""



