jq 놀이터
jq Playground
JSON 가공 연습장 — 실전 샘플 데이터에 jq 필터를 실시간으로 실행하고, 레시피 갤러리와 연습 미션 10개로 jq를 익혀보세요.
히스토리 (0)
아직 기록이 없어요. 필터가 성공적으로 실행되면 최근 15개까지 저장됩니다.
JSON 입력
결과
jq 엔진 로딩 중…
WASM 약 1.5MB, 최초 1회만 내려받아요
필터 레시피 갤러리 (50개)
레시피를 클릭하면 필터와 어울리는 샘플 데이터가 함께 적용됩니다.
연습 미션
0 / 20 완료미션의 샘플 데이터를 불러와 필터를 작성한 뒤 채점해 보세요. 채점은 항상 해당 미션의 원본 샘플 데이터 기준으로 실행됩니다.
- 1
PullRequestEvent만 골라 저자(actor.login) 목록을 배열로 만드세요
샘플: GitHub 이벤트 (배열)
- 2
이벤트에 등장한 저장소 이름(repo.name)을 중복 없이 정렬된 배열로 만드세요
샘플: GitHub 이벤트 (배열)
- 3
phase가 "Running"인 Pod의 이름만 배열로 뽑으세요
샘플: Kubernetes PodList
- 4
지금 실행 중(state.running)인 컨테이너 이름만 배열로 뽑으세요
샘플: Kubernetes PodList
- 5
모든 컨테이너의 restartCount 총합을 구하세요
샘플: Kubernetes PodList
- 6
전체 주문 총액을 구하세요 (모든 item의 price × qty 합산)
샘플: 쇼핑몰 주문 (중첩)
- 7
status가 "delivered"인 주문의 orderId만 배열로 뽑으세요
샘플: 쇼핑몰 주문 (중첩)
- 8
고객 등급(tier)별 주문 수를 객체로 만드세요 (예: {"basic": 1, ...})
샘플: 쇼핑몰 주문 (중첩)
- 9
ERROR 레벨 로그가 몇 개인지 세어보세요
샘플: 서버 로그 (배열)
- 10
latency_ms가 가장 큰 로그의 message를 구하세요
샘플: 서버 로그 (배열)
- 1
WARN과 ERROR 레벨 로그의 message를 순서대로 배열에 담으세요
샘플: 서버 로그 (배열)
- 2
고객 이메일을 전부 소문자로 바꾼 배열을 만드세요
샘플: 쇼핑몰 주문 (중첩)
- 3
이벤트 type별 개수를 객체로 만드세요 (예: {"PushEvent": 2, ...})
샘플: GitHub 이벤트 (배열)
- 4
모든 컨테이너의 image를 중복 없이 정렬된 배열로 뽑으세요
샘플: Kubernetes PodList
- 5
latency_ms 상위 3개 로그의 message를 느린 순서대로 배열에 담으세요
샘플: 서버 로그 (배열)
- 1
서비스별 latency_ms 총합을 구해 큰 순서대로 상위 2개를 [{service, total}] 형태로 만드세요
샘플: 서버 로그 (배열)
- 2
주문 리포트 CSV를 만드세요: 헤더 "orderId","buyer","total" 행 다음에 주문별 (ID, 고객명, 총액) 행
샘플: 쇼핑몰 주문 (중첩)
- 3
재귀 하강(..)으로 문서 어디에 있든 email 값을 전부 찾아 배열로 모으세요
샘플: 쇼핑몰 주문 (중첩)
- 4
restartCount가 0보다 큰 컨테이너를 [Pod이름, 컨테이너이름] 쌍의 배열로 만드세요
샘플: Kubernetes PodList
- 5
ERROR 로그의 timestamp를 유닉스 시간(초)으로 변환한 배열을 만드세요 (strptime + mktime)
샘플: 서버 로그 (배열)
▸jq 치트시트 (연산자 · 함수)
경로 & 연산자
| 표현식 | 설명 |
|---|---|
.foo / .foo.bar | 키 접근 / 중첩 키 접근 |
.foo? | 키가 없어도 에러 대신 null |
.[0] / .[-1] | 배열 인덱스 (음수는 뒤에서부터) |
.[1:3] | 배열 슬라이스 (1 이상 3 미만) |
.[] | 배열/객체를 낱개 값 스트림으로 펼치기 |
a | b | 파이프: a의 출력을 b의 입력으로 |
a, b | 여러 출력을 순서대로 내보내기 |
a // b | a가 null/false면 b (기본값) |
.. | 재귀 탐색 (모든 하위 값 방문) |
. as $x | ... | 현재 값을 변수 $x에 바인딩 |
"이름: \(.name)" | 문자열 보간 (interpolation) |
if A then B else C end | 조건 분기 |
try A catch B | 에러가 나면 B로 대체 |
자주 쓰는 함수
| 표현식 | 설명 |
|---|---|
length / keys / values | 길이 / 키 배열 / null 아닌 값만 통과 |
has("k") / type | 키 존재 여부 / 값의 타입 |
map(f) / select(f) | 각 요소 변환 / 조건 필터 |
map_values(f) | 객체의 값만 일괄 변환 |
add / any / all | 합치기(합계·연결) / 하나라도 / 모두 |
flatten | 중첩 배열 평탄화 |
sort / sort_by(f) / reverse | 정렬 / 기준 정렬 / 뒤집기 |
group_by(f) | 기준값으로 묶어 배열의 배열로 |
unique / unique_by(f) | 중복 제거 (정렬됨) |
min_by(f) / max_by(f) | 기준값이 최소/최대인 요소 |
reduce .[] as $x (0; . + $x) | 누적 계산 |
to_entries / from_entries | 객체 ↔ key/value 쌍 배열 |
with_entries(f) | to_entries → 변환 → from_entries 축약 |
del(.a) | 키 삭제 |
tostring / tonumber | 문자열 ↔ 숫자 변환 |
split(",") / join(",") | 문자열 쪼개기 / 배열 잇기 |
startswith / endswith / contains | 문자열 검사 |
test("re"; "i") / capture | 정규식 매칭 / 그룹 추출 |
ascii_downcase / ascii_upcase | 소문자 / 대문자 변환 |
@csv / @tsv / @json / @base64 | 포맷 변환 (-r과 함께) |
이어서 해볼 도구
같은 흐름으로 이어지는 도구를 골라 두었습니다.
- ML 학습 데이터 탐색기LLM, 음성인식, TTS, Vision, 비디오 생성 모델의 학습 데이터 예시를 확인하세요.
- DB 마이그레이션 탐색기Flyway와 Alembic이 스키마 마이그레이션을 어떻게 적용·추적·롤백하는지 인터랙티브하게 익혀보세요. 같은 5개의 마이그레이션을 두 방식으로 단계별 적용/롤백하며, 버전 SQL 파일 vs Python 리비전, flyway_schema_history vs alembic_version, 그리고 체크섬 드리프트 함정까지 확인합니다.
- SQL 놀이터브라우저에서 진짜 SQLite(WASM)로 SQL을 실행하고 연습하세요. 샘플 DB 3종과 연습 미션 12개, 스키마 탐색기, CSV·.sqlite 내보내기를 지원합니다.
- DuckDB 데이터 분석 놀이터CSV·JSON·Parquet 파일을 브라우저에서 SQL로 분석하세요. SUMMARIZE·PIVOT·QUALIFY 등 DuckDB 분석 문법 체험, 샘플 데이터, 연습 미션 8개, 자동 차트와 Parquet 내보내기까지.