2012-01-19 4 views
2

는 urlencoded로 : 관심의Python으로 urlencode-ed 사전을 안전하게 평가하는 방법은 무엇입니까? 나는 나에게 다음과 같은 데이터를 전송하는 온라인 서비스와 통신해야

data_to_process = {...} 
args = {'args0': data_to_process, 'action': 'save'} 

result = urllib2.urlopen(..., urllib.urlencode(args), ...) 

주요 데이터는 data_to_process 사전에 저장됩니다. 문자열, 숫자 및 부울 값만 포함하는 원래 사전을 다시 가져오고 싶습니다. 어떻게 이것을 할 수 있습니까?

나는

eval(dict_str,{'__builtins__': None}) 

을 시도했지만이 False 값 (누가 또 알고) 실패합니다.

아이디어에 감사드립니다!

답변

3

사용 ast.literal_eval :

>>> from ast import literal_eval 
>>> test = repr({"ham": True, 42: "spam", "foo": "bar"}) 
>>> test 
"{42: 'spam', 'foo': 'bar', 'ham': True}" 
>>> literal_eval(test) 
{42: 'spam', 'foo': 'bar', 'ham': True} 
3

당신은 서비스가 당신에게 JSON을 보내고 있지 않은지 확인 있습니까? 어떤 경우에는 내장 된 json.loads() 함수를 사용하여 파싱 할 수 있습니다 (Python 2.6 이후).

+0

예, 필자는 원래 코드 (OSS 프로젝트)에 액세스 할 수 있지만 커미터가 아니기 때문에 동작을 변경하지 않을 것입니다. – Akasha