当前位置 : 主页 > 网络编程 > 其它编程 >

将Python的嵌套字典变成一维,以便urlencode

来源:互联网 收集:自由互联 发布时间:2023-07-02
urlencode()编码嵌套字典用PHP生成URL字符串将Python的嵌套字典变成一维以便urlencodeurlencode()编码嵌套字典Python的u urlencode()编码嵌套字典 用PHP生成URL字符串 将Python的嵌套字典变成一维以便
urlencode()编码嵌套字典用PHP生成URL字符串将Python的嵌套字典变成一维以便urlencodeurlencode()编码嵌套字典Python的u

    • urlencode()编码嵌套字典
    • 用PHP生成URL字符串
    • 将Python的嵌套字典变成一维以便urlencode

urlencode()编码嵌套字典

Python的urllib.parse提供了urlencode()方法可以直接将字典转换成URL字符串。 但是使用时发现它只能处理一维字典转换嵌套字典时就会出错。如下

from urllib import parsepayload {"status": 200,"body": {"id": 1,"msg": "hello"}}url_str parse.urlencode(payload) # 编码成URL字符串print(url_str)print(parse.unquote(url_str)) # 恢复成Unicode字符串

其显示为

status200%7B%27id%27%3A1%2C%27msg%27%3A%27hello%27%7Dstatus200{id:1,msg:hello}

可见urlencode()处理内层字典时会出错。

用PHP生成URL字符串

嵌套字典转换成URL字符串之后应该是什么样子这里用PHP生成它看看。 PHP的http_build_query()与Python的urlencode()都是采用RFC3986规范。

200,"body" > array("id"> 1,"msg"> "hello"));$url_str http_build_query($payload, , , PHP_QUERY_RFC3986);echo $url_str; // 编码成URL字符串echo PHP_EOL;echo urldecode($url_str); // 恢复成Unicode字符串?>

其显示为

status2001hellostatus2001hello

将Python的嵌套字典变成一维以便urlencode

编写个处理函数将嵌套的内层字典展开转换成一维字典然后再由parse.urlencode()处理。

from urllib import parsedef flat_key(layer):""" Example: flat_key(["1","2",3,4]) -> "1[2][3][4]" """if len(layer) 1:return layer[0]else:_list ["[{}]".format(k) for k in layer[1:]]return layer[0] "".join(_list)def flat_dict(_dict):if not isinstance(_dict, dict):raise TypeError("argument must be a dict, not {}".format(type(_dict)))def __flat_dict(pre_layer, value):result {}for k, v in value.items():layer pre_layer[:]layer.append(k)if isinstance(v, dict):result.update(__flat_dict(layer,v))else:result[flat_key(layer)] vreturn resultreturn __flat_dict([], _dict)if __name__"__main__":payload {"status": 200,"body": {"id": 1,"msg": "hello"}}url_str parse.urlencode(flat_dict(payload)) # 编码成URL字符串print(url_str)print(parse.unquote(url_str)) # 恢复成Unicode字符串

其显示为

status2001hellostatus2001hello

可见生成的URL字符串与PHP相同。

【文章由韩国大带宽服务器 http://www.558idc.com/lg.html处的文章,转载请说明出处】
上一篇:在Delphi中可用FormatDateTime函数的用法
下一篇:没有了
网友评论