jq Reference
jq JSON 처리 레퍼런스
jq Reference 소개
jq 레퍼런스는 jq 커맨드라인 JSON 처리기를 위한 포괄적이고 검색 가능한 치트 시트입니다. jq는 커맨드라인이나 셸 스크립트에서 JSON 데이터를 슬라이싱, 필터링, 매핑, 변환하는 경량의 유연한 도구로, API, 로그 분석, Kubernetes 및 클라우드 CLI 출력, CI/CD 파이프라인에서 일반적으로 사용됩니다. 이 레퍼런스는 기본 필터(항등 ., 필드 접근 .key와 .key1.key2, 안전한 접근 .key?, 배열 이터레이터 .[], 인덱스 접근 .[n], 슬라이싱 .[n:m], 파이프 |, 쉼표 ,), 타입(type, length, keys, values, to_entries/from_entries), 조건(select(), if-then-else, 대체 연산자 //, 논리 연산자 not/and/or), 문자열(test() 정규식, split/join, ascii_downcase/ascii_upcase, ltrimstr/rtrimstr), 배열(map(), sort/sort_by(), group_by(), unique/unique_by, flatten), 고급(reduce, 변수 바인딩 $var, 함수 정의 def, @base64/@base64d, env)의 6개 카테고리로 구성됩니다.
이 레퍼런스는 커맨드라인에서 JSON 데이터를 정기적으로 처리하는 DevOps 엔지니어, 백엔드 개발자, 데이터 엔지니어, 시스템 관리자를 위한 것입니다. 모든 예제의 셸 명령 형식(echo와 파이프 사용)은 각 예제를 터미널에 직접 붙여넣어 즉시 출력을 확인할 수 있게 합니다. to_entries, group_by, reduce처럼 강력하지만 쉽게 잊어버리는 연산자의 정확한 구문을 빠르게 기억해야 할 때 특히 유용합니다.
6개 카테고리 구조는 기본에서 고급으로 진행됩니다. 대부분의 일상적인 jq 사용은 기본 필터와 조건 카테고리를 포함합니다 — API 응답에서 필드 선택, select()로 배열 필터링, if-then-else로 값에 따른 분기. 배열과 고급 카테고리는 고급 사용자 기능을 다룹니다: JSON 데이터 정렬 및 그룹화, reduce로 값 누적, 재사용 가능한 함수 정의, Base64 인코딩/디코딩.
주요 기능
- 항등 필터 ., 필드 접근 .key/.key1.key2, null 폴백이 있는 안전한 선택적 접근 .key?
- .[]를 사용한 배열 및 객체 이터레이션, .[n]과 .[n:m]을 사용한 인덱스/슬라이스 접근
- 체이닝과 다중 출력 생성을 위한 파이프 |와 쉼표 , 연산자
- 조건으로 필터링하는 select(expr)와 null 폴백을 위한 대체 연산자 //
- 복잡한 조건 로직을 위한 if-then-else와 논리 연산자 not, and, or
- 배열 변환을 위한 map(), sort_by(), group_by(), unique_by(), flatten
- 상태 저장 필터를 위한 누산기 패턴을 사용하는 reduce와 $var를 사용한 변수 바인딩
- 데이터 인라인 인코딩 및 디코딩을 위한 @base64와 @base64d 포맷 문자열
자주 묻는 질문
jq 항등 필터 .은 무엇을 하나요?
항등 필터 .은 입력을 받아 변경 없이 출력합니다. JSON 예쁘게 출력하기(echo '{"a":1}' | jq '.')에 가장 유용하며, 최소화된 JSON을 들여쓰기와 색상으로 포맷합니다. 변환이 필요 없지만 단계가 예상되는 파이프라인에서 자리 표시자로도 사용됩니다.
jq에서 중첩 필드에 접근하는 방법은?
필드 접근 연산자를 체이닝하세요: .a.b는 a 객체 내의 b 필드에 접근합니다. 특수 문자가 포함된 키에는 .["key"]도 사용할 수 있습니다. 필드가 존재하지 않을 수 있는 경우 오류 대신 null을 반환하는 .key?를 사용하세요.
select() 함수는 어떻게 동작하나요?
select(expr)는 표현식이 true로 평가되는 값만 통과시키고 false로 평가되는 값은 억제합니다. 일반적으로 배열 요소를 필터링하기 위해 .[] 후에 사용합니다: .[] | select(. > 3)은 배열을 이터레이션하고 3보다 큰 요소만 출력합니다.
jq에서 map()과 .[] |의 차이는 무엇인가요?
.[] | expr는 각 요소에 expr을 평가하고 별도의 출력 값을 생성합니다. map(expr)는 동일한 작업을 수행하지만 결과를 다시 배열로 래핑하여 추가 배열 작업에 전달하기 쉽게 만듭니다. 배열을 변환하고 배열로 유지하려면 map()을 사용하세요.
jq에서 reduce를 사용하는 방법은?
reduce .[] as $x (초기값; 누산기_표현식)은 입력 배열을 이터레이션합니다. $x는 각 요소이고, 두 번째 인수는 초기 누산기 값이며, 세미콜론 뒤의 표현식은 누산기를 업데이트합니다. 예를 들어, reduce .[] as $x (0; . + $x)는 배열의 모든 숫자를 합산합니다.
to_entries는 무엇이며 언제 유용한가요?
to_entries는 객체를 {key, value} 쌍의 배열로 변환합니다. .[]는 값만 제공하고 키는 제공하지 않으므로 객체 항목을 이터레이션하거나, 키 이름을 변환하거나, 키로 항목을 필터링할 때 유용합니다. from_entries는 변환을 역으로 수행하여 배열을 다시 객체로 변환합니다.
jq에서 재사용 가능한 함수를 정의하는 방법은?
메인 필터 앞에 def 함수이름: 표현식;을 사용하세요. 예를 들어, def double: . * 2; [1,2,3] | map(double)은 함수를 정의하고 사용합니다. 함수는 필터 표현식에 지역적입니다. 인수를 전달하려면 def 함수이름(arg): 표현식;을 사용하세요.
jq에서 Base64를 인코딩하고 디코딩하는 방법은?
@base64는 문자열을 Base64 인코딩으로 변환합니다. @base64d는 Base64 문자열을 일반 문자열로 다시 디코딩합니다. 이 포맷 문자열은 문자열 보간에서도 작동합니다. 이진 데이터를 Base64로 전송하는 API 작업 시 유용합니다.