문제

http get query 문자열은 정렬 된 키/값 쌍 시퀀스입니다.

?spam=eggs&spam=ham&foo=bar

특정 의미론의 경우 다음 사전과 동일합니다.

{'spam': ['eggs', 'ham'], 'foo': bar}

이것은 해당 페이지의 부울 속성에 대해 잘 작동합니다.

?expand=1&expand=2&highlight=7&highlight=9
{'expand': [1, 2], 'highlight': [7, 9]}

ID 2로 요소 확장을 중지하려면 expand 값과 URLENCODE 쿼리 문자열을 다시. 그러나 더 많은 모달 속성 (3 개 이상의 선택)이 있다면 실제로 SO와 같은 구조를 나타내고 싶습니다.

{'highlight_mode': {7: 'blue', 9: 'yellow'}}

여기서 해당 ID 키의 값은 알려진 열거의 일부입니다. 이것을 쿼리 문자열로 인코딩하는 가장 좋은 방법은 무엇입니까? 나는 So와 같은 두 가지 일련의 시퀀스를 사용하려고 생각하고 있습니다.

?highlight_mode=(7,blue)&highlight_mode=(9,yellow)

편집하다: 아는 것도 좋을 것입니다 이름 그것은 컨벤션과 관련이 있습니다. 나는 아무것도 없을 수도 있다는 것을 알고 있지만 예제 대신 이름을 사용하여 특정한 것에 대해 이야기 할 수 있다는 것이 좋습니다. 감사!

도움이 되었습니까?

해결책

일반적인 방법은 다음과 같이하는 것입니다.

highlight_mode[7]=blue&highlight_mode[9]=yellow

Afair, 꽤 많은 서버 측 언어는 실제로 이것을 상자 밖으로 지원하며 이러한 값에 대한 멋진 사전을 생성합니다.

다른 팁

또한 사람들이 중첩 사전을 인코딩 한 다음 Base64 (또는 유사한 것)로 더 인코딩 한 다음 전체 혼란을 단일 쿼리 문자열 매개 변수로 전달했습니다.

아주 못생긴.

반면에, Post를 사용하여 도망 갈 수 있다면 JSON은 이런 종류의 정보를 앞뒤로 전달하는 좋은 방법입니다.

많은 웹 프레임 워크에서 그것은 당신이 말하는 것과 다르게 인코딩됩니다.

{'foo': [1], 'bar': [2, 3], 'fred': 4}

다음과 같습니다.

?foo[]=1&bar[]=2&bar[]=3&fred=4

배열 답변이 일반 답변과 다른 이유는 디코딩 레이어가 매우 일반적인 FOO 케이스 (단일 요소)에서 덜 일반적인 FOO 케이스 (단일 요소를 갖는 배열)를 자동으로 알 수 있기 때문입니다.

이 표기법은 다음과 같이 외삽 될 수 있습니다.

?highlight_mode[7]=blue&highlight_mode[9]=yellow

해시가있을 때는 배열뿐만 아니라.

나는 이것이 레일에서 복사하는 레일과 대부분의 프레임 워크가하는 일이라고 생각합니다.

빈 배열, 빈 해시 및 스칼라 값 부족은이 인코딩에서 동일하게 보이지만 할 수있는 일은 많지 않습니다.

이것은 단지 몇 개의 화염을 일으키는 것 같습니다. 브라우저, 전송 레이어 및 쿼리 문자열 인코더는 신경 쓰지 않기 때문에 일부는 불필요한 것으로 보입니다. 신경 쓰는 유일한 것은 자동 쿼리 문자열 디코더입니다. []를 사용하는 레일 방법을 지원합니다. 대안은 스칼라를 추출하고 QueryString에서 배열을 추출하는 별도의 방법을 갖는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top