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과 함께) |