이 도구는 URL 쿼리 스트링을 JSON으로 파싱합니다. https://example.com/search?q=a&page=2 같은 전체 링크, example.com/search?q=a처럼 스킴 없는 링크, ?부터 시작하는 부분, 맨 파라미터 모두 붙여넣을 수 있습니다. 퍼센트 인코딩은 디코딩되고 +는 공백이 되며 filter[min]=1 같은 대괄호 표기는 중첩 객체와 배열로 복원됩니다.
브라우저 주소창이나 서버 로그의 요청을 디버깅하거나, 테스트용 픽스처가 필요하거나, 대괄호를 이해하는 프레임워크가 어떤 문자열을 어떻게 읽을지 보고 싶을 때 유용합니다. 이 사이트의 JSON→쿼리 스트링 도구의 반대 방향입니다. 숫자·불리언 파싱을 켜지 않으면 값은 텍스트로 남습니다.
파싱은 브라우저 안에서 이루어집니다. 200,000자를 넘는 입력은 Web Worker에서 처리하고, 1,000,000자를 넘으면 편집기에서 원문을 숨기되 전체 입력을 파싱합니다. 한도는 20 MiB입니다.
사용 방법
URL 또는 쿼리 붙여넣기
https://가 있든 없든 URL,?로 시작하는 문자열, 또는a=1&b=2만 붙여넣습니다. URL에서는 첫?뒤부터#앞까지만 읽고 프래그먼트는 무시합니다. 샘플 메뉴에서 API 응답, 중첩 배열, 경계 사례를 불러올 수 있습니다.빠진 인덱스 처리 방식 고르기
빠진 인덱스에서 압축은
a[2]=x같은 빈틈을 닫아 짧은 배열로 만들고, null로 채우기는 위치를 유지하며 빈틈을 null로 채웁니다. 어느 쪽이든 알림이 나옵니다.타입 변환 여부 정하기
숫자·불리언 파싱을 끄면 모든 값이 텍스트로 남고, 켜면 숫자,
true,false,null이 실제 JSON 값이 됩니다.JSON과 오류 확인
출력은 들여쓴 JSON이고 파라미터 수치는 읽은 쌍의 수입니다. 파라미터가 없거나, 다른 키와 모순되는 키가 있거나, 인덱스가 1000을 넘으면 키 이름이 든 오류가 나옵니다.
결과 복사
JSON을 복사하거나 다른 도구의 입력으로 씁니다.
작동 원리
키를 파싱하는 방식
각 키는 기본 이름과 대괄호 조각 목록으로 나뉩니다. a[b][0]은 a, b, 0 경로가 됩니다. 숫자로만 된 조각은 배열 인덱스, 빈 조각 []는 배열 끝에 추가, 그 밖의 조각은 객체 키입니다. a[b]c처럼 이름 뒤에 대괄호 묶음만 오는 형태가 아닌 키는 문자 그대로의 이름으로 씁니다.
이름을 처음 언급한 파라미터가 컨테이너를 정합니다. tags[]와 tags[0]은 배열을, tags[x]는 객체를 만들고, 이후 파라미터는 그 모양에 맞아야 합니다. a=1 다음에 a[b]=2, 또는 a[b]=1 다음에 a[]=2처럼 충돌하면 빈 키 항목을 지어내지 않고 키 이름이 든 오류로 알려 줍니다.
| 쿼리 | JSON |
|---|---|
| a=1&a=2 | {"a":["1","2"]} |
| a[]=1&a[]=2 | {"a":["1","2"]} |
| a[b]=1 | {"a":{"b":"1"}} |
| a[2]=x | 압축하면 {"a":["x"]}, 채우면 [null,null,"x"] |
| flag | {"flag":""} |
| a=1&a[b]=2 | 오류: 단순 값과 객체가 섞임 |
디코딩과 URL 처리
텍스트는 브라우저의 URLSearchParams가 처리하며 WHATWG URL 표준의 form-urlencoded 규칙을 따릅니다. 퍼센트 이스케이프는 UTF-8로 디코딩되고 +는 공백이 됩니다. 도구는 첫 ? 뒤부터 # 앞까지를 읽습니다. ? 앞부분에 이미 =나 &가 있으면 입력 전체를 쿼리로 보므로 a=b?c=d는 값이 b?c=d인 파라미터 하나입니다. 스킴은 필요 없어서 example.com/p?x=1도 됩니다.
타입, 빈틈, 한도
쿼리 스트링에는 타입이 없어서 page=2와 page=%32는 모두 텍스트 2입니다. 기본값에서는 추측하지 않고, 숫자·불리언 파싱을 켜면 2, 9.90 같은 일반 숫자와 true, false, null이 JSON 값이 됩니다. 007이나 긴 숫자열은 바꾸면 값이 달라지므로 텍스트로 남습니다.
인덱스로 만든 배열에는 빈틈이 생길 수 있습니다. a[2]=x는 기본적으로 qs 라이브러리처럼 ["x"]로 압축하거나 null로 채우며, 알림이 빠진 인덱스를 알려 줍니다. 1000을 넘는 인덱스는 거부하므로 a[100000]=x가 거대한 배열을 만들 수 없습니다.
실제 예시
https://example.com/search?q=hello+world&page=2&tags[]=a&tags[]=b&filter[min]=1&filter[max]=9{
"q": "hello world",
"page": "2",
"tags": [
"a",
"b"
],
"filter": {
"min": "1",
"max": "9"
}
}? 뒤 부분만 쓰입니다. +는 공백이 되고, tags[]는 배열에 추가하며, filter[min]은 객체를 만들고, page는 문자열 2로 남습니다.
example.com/search?q=a&tags[0]=x&tags[1]=y#results{
"q": "a",
"tags": [
"x",
"y"
]
}https://가 없어도 됩니다. 첫 ? 뒤를 모두 읽고 # 뒤의 텍스트는 버립니다.
?a=1&a=2&a=3&flag&empty=&=x{
"a": [
"1",
"2",
"3"
],
"flag": "",
"empty": "",
"": "x"
}키를 반복하면 값이 배열로 모입니다. 등호 없는 키와 값이 빈 키는 빈 문자열이 되고, =x는 이름이 빈 키와 값 x로 받아들입니다.
a[2]=x{
"a": [
null,
null,
"x"
]
}빠진 인덱스를 null로 채우기로 두면 위치가 유지되고 알림이 인덱스 0과 1을 알려 줍니다. 기본값 압축에서는 결과가 ["x"]입니다.
page=2&price=9.90&on=true&off=false&x=null&zip=007&name=Ada{
"page": 2,
"price": 9.9,
"on": true,
"off": false,
"x": null,
"zip": "007",
"name": "Ada"
}숫자·불리언 파싱을 켜면 page, price, on, off, x가 JSON 값이 됩니다. zip=007은 0이 사라지므로 텍스트로 남고 name은 숫자가 아닙니다.
a[b]=1&a[]=2“a[]”이(가) 같은 키에 배열·객체·단순 값을 섞어 쓰고 있습니다.a가 이미 객체라서 a[]로 추가할 수 없습니다. 도구는 빈 키 항목을 만드는 대신 충돌한 키를 알려 줍니다.
자주 하는 실수
요청하지 않으면 숫자와 불리언은 문자열로 남습니다
page=2는 기본값에서"2"가 됩니다. 비교나 계산 전에 숫자·불리언 파싱을 켜거나 스키마를 쓰세요.007같은 ID는 어느 쪽이든 텍스트로 남습니다.값이 하나면 문자열, 둘이면 배열입니다
한 번 나온 키는 문자열이고 같은 키가 두 번 나오면 배열이므로 소비자는 두 모양을 모두 처리해야 합니다. 항상 배열을 원하면
tags[]=를 쓰세요.형식을 섞으면 오류입니다
a=1&a[b]=2,a=1&a[]=2,a[b]=1&a[]=2는 모양이 맞지 않아 모두 키 이름이 든 오류를 냅니다. 한 이름에는 한 가지 형식만 쓰세요.빠진 인덱스는 배열을 바꿉니다
a[2]=x는 압축하면 항목 하나, 채우면 null 둘이 앞에 붙은 항목 셋짜리 배열이 됩니다. 어느 쪽이든 알림이 빠진 인덱스를 알려 주며, 1000을 넘는 인덱스는 거부됩니다.데이터 안의 ? 나 #
첫
#뒤는 모두 버려지고,?는 그 앞 텍스트에=나&가 없을 때만 URL을 나눕니다. 글자 그대로의#은%23,+는%2B로 퍼센트 인코딩하세요.특이한 키도 평범한 데이터로 남습니다
__proto__나constructor같은 키도 평범한 데이터가 됩니다. 파서가 프로토타입 없는 객체를 만들기 때문입니다. 이름이 빈 키도 유효해서=x는{"":"x"}를 만듭니다.
자주 묻는 질문
전체 URL을 붙여넣어도 되나요?
네, https://가 있든 없든 됩니다. 첫 ? 뒤의 텍스트를 읽고 경로와 # 뒤는 무시합니다.
반복된 키는 어떻게 처리하나요?
순서대로 배열에 모읍니다. a=1&a=2는 {"a":["1","2"]}가 됩니다.
왜 숫자가 문자열인가요?
쿼리 스트링에는 텍스트만 담기므로 기본값에서는 1이 "1", true가 "true"로 남습니다. 숫자·불리언 파싱을 켜면 일반 숫자, true, false, null이 변환됩니다.
+는 어떻게 처리되나요?
form-urlencoded 규칙에 따라 공백이 됩니다. 글자 그대로의 더하기는 %2B로 써야 합니다.
충돌 오류는 무슨 뜻인가요?
같은 이름 아래 서로 맞지 않는 모양을 요구하는 파라미터가 둘 있다는 뜻입니다. 단순 값과 대괄호 객체, 또는 객체에 배열 추가가 그 예이며 메시지에 키 이름이 나옵니다.
a[]=1 방식의 배열도 지원하나요?
네. 빈 대괄호는 배열 끝에 순서대로 추가하고, 숫자 대괄호는 위치를 정합니다.
a[2]=x는 어떻게 되나요?
기본값인 압축에서는 x 하나만 든 배열이 나오고, null로 채우기에서는 위치 2를 유지한 채 0과 1을 null로 채웁니다. 어느 쪽이든 알림이 빠진 인덱스를 알려 줍니다.
내 URL이 업로드되나요?
아니요. 파싱은 전적으로 브라우저 안에서 실행됩니다.
마지막 업데이트:
