Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解码查询字符串中的括号编码字典_Python_Query String - Fatal编程技术网

Python 解码查询字符串中的括号编码字典

Python 解码查询字符串中的括号编码字典,python,query-string,Python,Query String,我有以下查询字符串'?attr[foo]=1和attr[bar]=2' 有没有一种简单的方法可以使用现有库将其解码到字典中:“{attr:{'foo':1,'bar':2}}” 我知道我可以很容易地实现一个解码器,只需询问是否有一个解码器可以做到这一点。这里有一个替代方法,可以在评论中回答您的问题 import re import urlparse s = '?attr[foo]=1&attr[bar]=2' def parse(s): d = {} for key,

我有以下查询字符串
'?attr[foo]=1和attr[bar]=2'

有没有一种简单的方法可以使用现有库将其解码到字典中:
“{attr:{'foo':1,'bar':2}}”


我知道我可以很容易地实现一个解码器,只需询问是否有一个解码器可以做到这一点。

这里有一个替代方法,可以在评论中回答您的问题

import re
import urlparse

s = '?attr[foo]=1&attr[bar]=2'

def parse(s):
    d = {}
    for key, value in urlparse.parse_qs(s).items():
        match = re.match(r'(?P<key>[^\[]+)\[(?P<value>[^\]]+)\]', key)
        gd = match.groupdict()
        d.setdefault(gd['key'], {})[gd['value']] = value[0]
    return d

print(parse(s[1:]))

有没有一种标准的方法来对URL上的字典/哈希进行编码

您可以使用JSON,使用
JSON.dumps()
urllib.parse.quote()
进行编码:

>>> from urllib.parse import quote, unquote
>>> quote(json.dumps({'attr': {'foo': 1, 'bar': 2}}))
'%7B%22attr%22%3A%20%7B%22foo%22%3A%201%2C%20%22bar%22%3A%202%7D%7D'
urllib.parse.unquote()
json.loads()
进行解码:

>>> json.loads(unquote('%7B%22attr%22%3A%20%7B%22foo%22%3A%201%2C%20%22bar%22%3A%202%7D%7D'))
{'attr': {'foo': 1, 'bar': 2}}
请注意,在Python2.x上,
urllib.parse
模块不存在,请改用
urllib2.quote()
urllib2.unquote()


由于转义,URL变得有点难看,但编码和解码很简单,因此这是一种很好的方法,只要您不需要人们能够轻松地键入或理解编码的URL。

标准库中没有任何内容可以处理此问题,因为没有编码这种格式的标准。有没有标准的方法来编码URL上的字典/哈希?这是主干网的默认方式,所以我想知道。有各种相互竞争的“标准”,其中没有一个能进入标准机构。使用会话传递字典非常有效,imhoI会使用这种方式,但我需要与主干网兼容,并且不想覆盖一堆
fetch
s。正则表达式比我的实现中的正则表达式更受保护。谢谢
>>> json.loads(unquote('%7B%22attr%22%3A%20%7B%22foo%22%3A%201%2C%20%22bar%22%3A%202%7D%7D'))
{'attr': {'foo': 1, 'bar': 2}}