에 사전 브래킷 인코딩 된 I가 다음과 같은 쿼리 문자열 '?attr[foo]=1&attr[bar]=2'
디코드 쿼리 문자열
사전에 그 디코딩 할 수있는 쉬운 방법이 있나요 : '{attr: {'foo':1,'bar':2}}'
기존 라이브러리를 사용하는가?
저는 이것을 위해 디코더를 구현할 수 있다는 것을 알고 있습니다. 단지 이것을 수행하는 디코더가 있는지 묻는 것뿐입니다.
에 사전 브래킷 인코딩 된 I가 다음과 같은 쿼리 문자열 '?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'}}
Regex는 제 구현에서보다 안전합니다. 감사합니다 – leonsas
여기에 코멘트에있는 당신의 질문에 대한 대답 대안 접근 방식입니다.
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}}
파이썬에서 urllib.parse
를 2.x으로하는 것으로 모듈이 없으면 대신 urllib2.quote()
및 urllib2.unquote()
을 사용하십시오.
이스케이프 때문에 URL이 약간 엉망이되지만 인코딩과 디코딩은 쉽지 않으므로 사람들이 인코딩 된 URL을 쉽게 입력하거나 이해할 필요가없는 한 좋은 접근 방법입니다.
이걸 사용 하겠지만, 백본과 호환 될 수 있어야하고,'fetch's를 오버라이드하고 싶지는 않습니다. – leonsas
해당 형식을 코드화하는 표준이 없으므로 표준 라이브러리에는이 형식을 처리 할 수있는 방법이 없습니다. –
URL에 사전/해시를 인코딩하는 표준 방법이 있습니까? 이것이 백본이 수행하는 기본 방법이므로 궁금합니다. – leonsas
다양한 경쟁 표준이 있으며 어느 것도 표준 표준을 따르지 않았습니다. –