栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【2021-10-13】python 字典进行URL编码(复习)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【2021-10-13】python 字典进行URL编码(复习)

这里群里的提问:
大佬们,问个问题,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
"""
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/321588.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号