jq 플레이그라운드
브라우저에서 jq 1.7.1 실행. -r, -s, -n, --arg, JSON Lines를 지원하고 출력·stderr·종료 코드가 명령줄과 같습니다. 오류는 위치와 원인을 보여 줍니다.
- 브라우저에서 처리
- 데이터가 브라우저 밖으로 나가지 않습니다
- 무료 · 회원가입 불필요
WeChat으로 스캔하여 공유
예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.
예: 네이버 블로그 검색 API 결과 정리
네이버 검색 API 블로그 검색 문서에 따르면 JSON 응답은 items 배열로 결과를 돌려주고, title과 description에서 검색어와 일치하는 부분은 <b> 태그로 감싸며, postdate는 20161208처럼 yyyymmdd 형식입니다. 이 구조에 맞춘 응답(내용은 예시)으로 해 봅니다.
{"lastBuildDate":"Fri, 02 Oct 2026 10:00:00 +0900","total":2,"start":1,"display":2,"items":[
{"title":"<b>제주</b> 3박 4일 여행 코스","link":"https://blog.naver.com/example/1","description":"<b>제주</b> 동쪽 일정 정리","bloggername":"여행하는 개발자","bloggerlink":"blog.naver.com/example","postdate":"20260918"},
{"title":"<b>제주</b> 카페 정리","link":"https://blog.naver.com/example/2","description":"","bloggername":"카페 기록","bloggerlink":"blog.naver.com/example2","postdate":"20260925"}]}
-c를 켜고 아래 필터를 실행하면 <b> 태그를 지우고 날짜를 2026-09-18 형식으로 바꾼 결과가 한 줄씩 나옵니다.
.items[] | {title: (.title | gsub("</?b>"; "")),
date: (.postdate | strptime("%Y%m%d") | strftime("%Y-%m-%d"))}
{"title":"제주 3박 4일 여행 코스","date":"2026-09-18"}
{"title":"제주 카페 정리","date":"2026-09-25"}
검색어를 필터에 직접 쓰지 않고 변수로 넘기면 셸 따옴표를 신경 쓸 일이 줄어듭니다. 「+ 변수」로 q = 제주를 추가하고 [.items[] | select(.title | contains($q))] | length를 실행하면, 제목에 「제주」가 들어간 결과 수 1이 나옵니다. 명령줄 상자에는 jq --arg q '제주' '[.items[] | select(.title | contains($q))] | length' input.json이 표시됩니다.
예: 오류가 나기 전의 출력도 그대로
jq는 오류가 나기 전까지 만든 값을 출력한 뒤 stderr에 오류를 쓰고 종료 코드 5로 끝납니다. 이 페이지도 둘 다 보여 줍니다.
[{"name":"a"},"b"]에 .[] | .name을 실행하면 먼저 "a"가 나오고, 이어서 jq: error (at input.json:1): Cannot index string with string "name"과 종료 코드 5가 표시됩니다. 아래 힌트는 값이 문자열이며, 그 안이 JSON 텍스트라면 fromjson으로 먼저 파싱하라고 알려 줍니다. JSON 문법 오류는 「입력에서 보기」로 jq가 멈춘 토큰을 선택합니다. jq는 위치를 바이트 단위로 알려 주므로 한글이 섞인 줄에서도 페이지가 글자 위치로 바꿔 선택합니다.
JSON Lines 로그 집계
한 줄에 JSON 하나인 로그는 -n과 inputs로 한 줄씩 읽을 수 있습니다.
상태 코드가 200, 502, 200, 200인 네 줄에 -n -c로 reduce inputs as $r ({}; .[$r.status] += 1)을 실행하면 {"200":3,"502":1}이 나옵니다. -s는 파일 전체를 메모리에 올리고, -n과 inputs는 한 번에 한 값만 읽습니다.
터미널과 같은 결과
실행은 언제나 jq 옵션 필터 input.json과 같고, input.json은 입력 끝에 줄바꿈을 붙인 것입니다. 테스트에서는 옵션, 변수, JSON Lines, 문법 오류와 실행 오류, halt_error, -e, --seq, --stream을 포함한 71개 경우를 이 페이지의 엔진과 jq 1.7.1 명령줄로 실행해 stdout, stderr, 종료 코드를 바이트 단위로 비교합니다. jq 1.7.1 매뉴얼 예제 241개도 환경 변수 $PAGER를 읽는 2개를 빼고 모두 같습니다.
설치된 버전은 jq --version으로 확인합니다. Ubuntu 24.04(1.7.1-3ubuntu0.24.04), Debian 13(1.7.1-6), macOS 27의 /usr/bin/jq(jq-1.7.1-apple 출력)는 1.7.1이고 Homebrew는 1.8.2입니다. 1.7.1은 큰 정수를 쓴 그대로 출력하지만 계산하면 배정밀도 실수가 됩니다. 예를 들어 9007199254740993 + 0은 9007199254740992입니다.
다른 도구와 비교(2026-10-02 실측)
- play.jqlang.org(jq 프로젝트 공식 Playground, jqplay.org는 이리로 이동)는 브라우저에서 jq 1.8을 실행합니다.
trim이 동작하고 입력이 담긴 요청은 보이지 않았습니다. 출력과 오류를 함께 보여 주며,repeat(1)은 약 30초 뒤 「Operation timed out」이 되었습니다. jq 1.8을 쓴다면 이쪽이 맞습니다. - jsonwiz.com/jq-online(Bing에서 「jq 온라인」 1위)은 esm.sh에서
jq-wasm@0.3.1을 불러오는데 esm.sh가 404를 돌려주어, 모든 실행이 「Failed to fetch dynamically imported module」로 끝났습니다. - byteflow.tools의 jq 플레이그라운드는 Chromium 152에서 모든 필터가
Aborted(CompileError: WebAssembly.instantiate(): … violates the following Content Security Policy …)로 끝났고, 두 줄짜리 JSON Lines는 실행 전에 「Invalid JSON: Unexpected non-whitespace character after JSON at position 8 (line 2 column 1)」로 막혔습니다.
제한
- 입력 외의 파일은 읽지 못합니다.
--slurpfile,--rawfile,-f,-L,import,include,--args/--jsonargs는 쓸 수 없습니다. $ENV와env는 WebAssembly 실행 환경의 고정값(HOME=/home/web_user)이며 사용자의 환경 변수가 아닙니다.now와 지역 시간 함수는 브라우저 시계를 씁니다.- 2MB가 넘는 입력은 「실행」을 눌러야 실행됩니다. 2MB가 넘는 파일은 편집기에 표시하지 않습니다. 1MB가 넘는 출력은 출력 창에서 잘리지만 복사와 다운로드는 전체입니다.
- 10초(입력 1MB마다 1초 추가)가 넘는 실행은 중지합니다. 메모리 부족이나 너무 깊은 재귀가 나면 엔진을 다시 시작합니다.
- 색상 출력(
-C)은 없습니다.
관련 도구: 경로로 값을 꺼내는 JSONPath 테스터, 보기 좋게 정리하는 JSON 포매터, JSON 배열과 JSON Lines를 바꾸는 JSONL 변환기, 두 출력을 비교하는 JSON 차이 비교.
FAQ
진짜 jq인가요, JavaScript로 다시 만든 것인가요?
jq 1.7.1 그 자체입니다. 공식 C 소스를 jq-web 0.6.2로 WebAssembly 컴파일한 것이며, jq 옵션 필터 input.json과 같은 방식으로 실행합니다. 테스트에서 71가지 필터의 출력, 오류 문구, 종료 코드를 jq 1.7.1 명령줄과 바이트 단위로 비교하고, jq 1.7.1 매뉴얼 예제 중 환경 변수를 읽지 않는 239개가 모두 같은지 확인합니다.
왜 1.8이 아니라 1.7.1인가요?
Ubuntu 24.04, Debian 13, macOS의 /usr/bin/jq가 1.7.1이기 때문입니다. 여기서 확인한 필터는 그 환경에서 같은 결과를 냅니다. jq 1.8에서 추가된 trim, ltrim, rtrim, trimstr, toboolean, skip, add/1, @urid를 쓰면 페이지가 알려 줍니다.
입력한 JSON이 서버로 전송되나요?
아니요. jq는 이 탭의 Web Worker에서 실행됩니다. 네트워크 요청은 처음 사용할 때 엔진 파일(jq.wasm, 압축 시 약 1MB)을 받는 것뿐입니다. 공유 링크에는 필터, 옵션, 변수 이름만 들어가고 입력과 변수 값은 들어가지 않습니다.
입력한 내용이 페이지에 남나요?
이 브라우저에만 남습니다. 필터, 옵션, 변수(이름과 값), 직접 입력하거나 붙여 넣은 40KB 이하의 입력은 이 브라우저에 저장되어(localStorage) 다음에 페이지를 열 때 돌아옵니다. 연 파일과 그보다 큰 입력은 저장하지 않습니다. 「지우기」를 누르면 저장된 입력도 지워지고, 필터는 바꿀 때까지 남습니다.
얼마나 큰 입력까지 되나요?
파일은 200MB까지입니다. 2MB가 넘는 입력은 키를 누를 때마다 실행하지 않으니 「실행」을 누르세요. 출력 창은 앞 1MB만 보여 주고 복사와 다운로드는 전체입니다. 10초(입력 1MB마다 1초 추가)가 넘는 실행은 중지합니다.
여기서는 되는데 터미널에서는 오류가 납니다.
대부분 따옴표 문제입니다. 「명령줄」 상자의 명령을 복사하세요. 필터를 작은따옴표로 감싸고 안의 작은따옴표도 이스케이프해 두었으므로 bash와 zsh에서 그대로 동작합니다. PowerShell과 cmd.exe는 따옴표 규칙이 다릅니다. jq --version으로 버전도 확인하세요.