JSON을 쿼리 문자열에 직렬화하는 표준화된 방법?
난 편안한 공간을 만들려고 노력중이야API
어떻게 연재해야 할지 고민하고 있어요JSON
에 대한 데이터HTTP query string
.
요구로 전달해야 하는 필수 및 옵션 인수에는 다음과 같은 여러 가지가 있습니다(아래 JSON 개체로 표시됨).
{
"-columns" : [
"name",
"column"
],
"-where" : {
"-or" : {
"customer_id" : 1,
"services" : "schedule"
}
},
"-limit" : 5,
"return" : "table"
}
다양한 클라이언트를 지원해야 하기 때문에 이 json 개체를 쿼리 문자열로 변환할 수 있는 표준화된 방법을 찾고 있습니다.있어요, 어떻게 생겼죠?
또 하나의 대안은 사용자가 json 오브젝트를 메시지 본문 내에서 그냥 전달할 수 있도록 하는 것입니다만, 저는 그것을 피해야 한다고 읽었습니다(요청 본문이 있는HTTP GET).
무슨 생각 있어?
설명을 위해 편집:
위의 지정된 json 개체를 여러 언어로 인코딩하는 방법을 나열합니다.
jQuery
사용.$.param
: -param[]=name&-where[-or][-or][customer_id]=1&-where[-or][services]=param&-limit=5&return=칼럼PHP
사용.http_build_query
: - param[0]=name&-param[1]=column&-where[-or][customer_id]=1&-where[-or][services]=param&-limit=5&return=columnPerl
사용.URI::query_form
: - columns=name&-columns=column&-where=Column(0x59d6eb8)&-limit=5&return=columnPerl
사용.complex_to_query
: - param:0=name&-param:1=column&-limit=5&-where.-or.customer_id=1&-where.-or.services=param&return=column
jQuery와 PHP는 매우 유사합니다.complex_to_query를 사용하는 Perl도 이와 거의 비슷합니다.하지만 똑같이 생긴 건 없어요
URL-encode(https://en.wikipedia.org/wiki/Percent-encoding)에서 JSON 텍스트를 단일 쿼리 문자열 파라미터에 입력합니다.예를 들어, 패스하고 싶은 경우{"val": 1}
:
mysite.com/path?json=%7B%22val%22%3A%201%7D
JSON이 너무 길면 URL 길이 제한 문제가 발생한다는 점에 유의하십시오.이 경우, 저는POST
몸으로 (네, 알아요.POST
"순수"가 아니며 REST 패러다임에 잘 맞지 않지만 도메인별 JSON 기반 쿼리 언어도 아닙니다.
문자열 시리얼화를 쿼리하는 JSON의 표준이 따로 없기 때문에 몇 가지 JSON 시리얼라이저를 비교해보니 다음과 같습니다.
JSON: {"_id":"5973782bdb9a930533b05cb2","isActive":true,"balance":"$1,446.35","age":32,"name":"Logan Keller","email":"logankeller@artiq.com","phone":"+1 (952) 533-2258","friends":[{"id":0,"name":"Colon Salazar"},{"id":1,"name":"French Mcneil"},{"id":2,"name":"Carol Martin"}],"favoriteFruit":"banana"}
Rison: (_id:'5973782bdb9a930533b05cb2',age:32,balance:'$1,446.35',email:'logankeller@artiq.com',favoriteFruit:banana,friends:!((id:0,name:'Colon Salazar'),(id:1,name:'French Mcneil'),(id:2,name:'Carol Martin')),isActive:!t,name:'Logan Keller',phone:'+1 (952) 533-2258')
O-Rison: _id:'5973782bdb9a930533b05cb2',age:32,balance:'$1,446.35',email:'logankeller@artiq.com',favoriteFruit:banana,friends:!((id:0,name:'Colon Salazar'),(id:1,name:'French Mcneil'),(id:2,name:'Carol Martin')),isActive:!t,name:'Logan Keller',phone:'+1 (952) 533-2258'
JSURL: ~(_id~'5973782bdb9a930533b05cb2~isActive~true~balance~'!1*2c446.35~age~32~name~'Logan*20Keller~email~'logankeller*40artiq.com~phone~'*2b1*20*28952*29*20533-2258~friends~(~(id~0~name~'Colon*20Salazar)~(id~1~name~'French*20Mcneil)~(id~2~name~'Carol*20Martin))~favoriteFruit~'banana)
QS: _id=5973782bdb9a930533b05cb2&isActive=true&balance=$1,446.35&age=32&name=Logan Keller&email=logankeller@artiq.com&phone=+1 (952) 533-2258&friends[0][id]=0&friends[0][name]=Colon Salazar&friends[1][id]=1&friends[1][name]=French Mcneil&friends[2][id]=2&friends[2][name]=Carol Martin&favoriteFruit=banana
URLON: $_id=5973782bdb9a930533b05cb2&isActive:true&balance=$1,446.35&age:32&name=Logan%20Keller&email=logankeller@artiq.com&phone=+1%20(952)%20533-2258&friends@$id:0&name=Colon%20Salazar;&$id:1&name=French%20Mcneil;&$id:2&name=Carol%20Martin;;&favoriteFruit=banana
QS-JSON: isActive=true&balance=%241%2C446.35&age=32&name=Logan+Keller&email=logankeller%40artiq.com&phone=%2B1+(952)+533-2258&friends(0).id=0&friends(0).name=Colon+Salazar&friends(1).id=1&friends(1).name=French+Mcneil&friends(2).id=2&friends(2).name=Carol+Martin&favoriteFruit=banana
그 중 가장 짧은 것은 URL 객체 표기법입니다.
다음과 같이 보내주시면 어떨까요?
http://example.com/api/wtf?
[-columns][]=name&
[-columns][]=column&
[-where][-or][customer_id]=1&
[-where][-or][services]=schedule&
[-limit]=5&
[return]=table&
REST 클라이언트와 함께 시도했습니다.
그리고 서버측(Ruby with Sinatra)에서 파라미터를 확인했더니, 당신이 원하는 것을 얻을 수 있었습니다. :-)
다른 옵션은 노드 쿼리 문자열일 수 있습니다.또한 지금까지 나열한 것과 유사한 체계를 사용합니다.
다 npm
★★★★★★★★★★★★★★★★★」bower
그래서 계속 쓰고 있어요.
중첩된 개체에 적합합니다.
를 의 url
는 '하다'입니다obj
JSON이 있다.
쿼리 파라미터로 JSON 오브젝트 삽입:
value = JSON.stringify(obj);
URLSearchParams
문자열을 검색 매개 변수를 나타내는 개체로 변환합니다. toString
URL:
queryParams = new URLSearchParams(value).toString();
템플릿 리터럴을 사용하여 쿼리 파라미터를 전달합니다.
url = `https://some-url.com?key=${queryParams}`;
, 이제url
로 JSON 를 포함합니다.key
이름사용자 정의 이름')
형 외?JSON
부에서url
:
This is assuming you have access to the 이것은, 에 액세스 할 수 있는 것을 전제로 하고 있습니다.url
(either as (어느 쪽인가 하면)string
or 또는URL
개체)
url_obj = new URL(url); (only if url is NOT a URL object, otherwise ignore this step)
Extract all query parameters in the 의 모든 쿼리 파라미터를 추출합니다.url
:
queryParams = new URLSearchParams(url_obj.search);
하다를 사용하세요.key
특정 값을 추출하다.「 」 、 「 」
obj = JSON.parse(queryParams.get('key').slice(0, -1));
slice()
할 때 합니다.=
필요하지 않은 쿼리 매개 변수에서 사용할 수 있습니다.
서 ★★★★obj
쿼리 매개 변수에서 전달된 개체와 동일합니다.
웹 콘솔에서 다음 단계를 수행하여 더 잘 이해할 것을 권장합니다.
다음 사이트에서 JSON의 예를 사용하여 테스트할 수 있습니다.https://json.org/example.html
언급URL : https://stackoverflow.com/questions/15872658/standardized-way-to-serialize-json-to-query-string
'programing' 카테고리의 다른 글
스프링 부트 - 초기 데이터 로드 중 (0) | 2023.04.04 |
---|---|
json을 객체 루비로 구문 분석 (0) | 2023.04.04 |
데이터베이스에서 django 모델을 생성할 수 있습니까? (0) | 2023.04.04 |
페이지가 상위 페이지인지 하위 페이지인지 확인하시겠습니까? (0) | 2023.04.04 |
AngularJS - 단일 템플릿 내 다중 ng 뷰 (0) | 2023.04.04 |