我有以下查询字符串'?attr[foo]=1&attr[bar]=2'
有没有一种简单的方法可以将其解码成字典:'{attr: {'foo':1,'bar':2}}'
使用现有的库?
我知道我可以很容易地为此实现一个解码器,只需询问是否有一个解码器可以做到这一点。
我有以下查询字符串'?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:]))
印刷:
{'attr': {'foo': '1', 'bar': '2'}}
这是另一种方法,可以在评论中回答您的问题。
是否有一种标准方法来对 URL 上的字典/哈希进行编码?
您可以使用 JSON,使用json.dumps()
andurllib.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}}
请注意,在 Python 2.x 上,该urllib.parse
模块不存在,请使用urllib2.quote()
andurllib2.unquote()
代替。
由于转义,URL 变得有点难看,但编码和解码是微不足道的,所以这是一个好方法,只要您不需要人们能够轻松键入或理解编码的 URL。