2011-07-29 5 views
3

x-www-form-urlencoded 폼 데이터의 쿼리 문자열이 제공됩니다.x-www-form-urlencoded 쿼리 문자열을 dict로 변환

data[foo]=bar&data[bar]=baz 

내가 파이썬 딕셔너리로 ​​번역하고 싶습니다 같은

{'data': {'foo': 'bar', 'bar': 'baz'}} 

또는 그 가까이에 뭔가. 기본적으로,이 양식 데이터는 PHP의 $ _POST 변수에 처리하는 방법과 유사 뭔가 :

Array 
(
    [data] => Array 
     (
      [foo] => bar 
      [bar] => baz 
     ) 

) 

그러나 urlparse.parse_qs은() 그냥 날 제공 :

{'data[bar]': ['baz'], 'data[foo]': ['bar']} 

그것은 세상의 끝이 아니야 . Dict의 값을 data[bar]이나 뭐든지 쉽게 호출 할 수 있습니다. 적어도이 종류의 구문 분석을 수행하는 모듈이 없다는 사실에 조금 놀랐습니다. 적어도 필자가 찾을 수는 있습니다. 아무도 몰라요?

보너스 질문 : 이유가 인 이유는 그러한 라이브러리가 Python에 존재하지 않는 이유입니다. PHP가 폼 데이터를 다중 레이어 배열로 변환하는 것은 어쨌든 잘못된 것입니까?

답변

-2
  • PHP는 색인 된 양식 변수를 자동으로 딥 레벨 배열로 디코딩합니다. PHP doc
  • 이것은 http 또는 웹 표준이 아닌 PHP 기능입니다.
  • HTTP RFC에는 일반적인 "배열"구조가 정의되어 있지 않기 때문에. [] 또는 키 문자열에 대한 다른 영숫자가 아닌 문자 사용
  • 그리고, 우리는 더 나은 단지 평면 키 = 값 형식

    • 를 사용하는 거라고, 그래서 정말 나쁜 버릇

    입니다 또는 클라이언트 측과 서버 측 모두 사용자 정의 데이터 형식 (PHP처럼)으로 다중 레벨 배열을 코드/디코드 할 수 있습니다.

  • 이 사용자 정의 형식으로 http API를 제공하는 경우 고객에게 많은 것을 설명해야합니다.