최근 수정 시각 : 2025-10-17 12:55:48

jq


1. 개요2. 문법
2.1. 내장 함수
3. 파생 소프트웨어
3.1. 구현체 및 바인딩3.2. jq를 개선한 소프트웨어3.3. jq를 사용하는 소프트웨어3.4. 언어 지원
4. 관련 문서

1. 개요

JSON 문서를 조회하고 스크립팅하기 위해 사용하는 쿼리 언어 및 이를 지원하는 CLI 유틸리티.

2. 문법

유닉스 파이프라인, 함수형 언어와 비슷하게 |를 기반으로 여러 개의 필터를 순서대로 거쳐 문서를 해석한다. 만약 이전 필터에서 여러 개의 문서가 전달되었을 경우, 개별 문서에 필터를 동시에 적용한다. 함수형 언어의 map을 생각하면 좋다.

주어진 문서에서 특정 필드를 찾는 필터는 .<필드명>이다. 예를 들어, foo 필드 하위 객체의 bar 필드 내용을 찾는다면 다음과 같이 할 수 있다.
.foo | .bar
이러한 패턴은 자주 쓰이기에 |를 생략하고 한번에 붙혀 쓸 수 있다.
.foo.bar
인덱스는 .[<인덱스>] 필터로 접근한다. 이 문법도 자주 쓰이기에 일반적인 JavaScript 문법과 마찬가지로 [<인덱스>] 처럼 쓸 수 있다.
.foo.bar[4]
이 때, 인덱스를 생략하면 해당 배열의 모든 문서를 각각의 개별 문서로 넘긴다. 상술했듯이 이렇게 되면 이어지는 필터 명령들이 개별 항목별로 따로 실행된다. 예를 들어, 회사원의 모든 이름을 출력하는 쿼리는 다음과 같이 작성할 수 있다.
.employees[].name
필터에는 기본적인 연산과 함수 사용이 가능하다. 예를 들어 직원의 이름이 단일 문자열 필드가 아니라 성과 이름이 별도의 필드로 나뉘어져 있을 경우, 다음과 같이 성과 이름을 합쳐 출력이 가능하다.
.employees[] | .firstname + " " + .lastname

2.1. 내장 함수

  • length: 길이를 구하는 함수. 자료형에 따라 기준이 달라지는데, 문자열의 경우 문자열의 길이를, 배열의 경우 배열의 길이를 출력한다. 객체의 경우 객체의 프로퍼티 개수를 기준으로 한다. 숫자의 경우 절댓값을 구한다.
  • keys: 객체의 모든 키를 배열로 반환하는 함수. js의 Object.keys()와 비슷하다.
  • values: 객체의 모든 키에 대한 값을 배열로 반환하는 함수. js의 Object.values()와 비슷하다.
  • select(): 배열이 주어질 경우, 주어진 표현식을 참으로 만드는 요소만 담은 배열을 반환한다.
  • map(): 주어진 표현식을 각 항목에 적용한 배열을 반환한다.
  • split(): 주어진 문자열을 기준으로 문자열을 분할한다.
  • join(): 주어진 문자열을 배열의 각 항목 사이사이에 넣어 합친 문자열을 반환한다.
  • reverse: 배열 또는 문자열을 역순으로 뒤집는다. 객체에도 사용할 수 있다.

3. 파생 소프트웨어

3.1. 구현체 및 바인딩

3.2. jq를 개선한 소프트웨어

3.3. jq를 사용하는 소프트웨어

  • jqp - 터미널 실시간 플레이그라운드
  • jqi - macOSGUI 플레이그라운드
  • jqview - Qt 기반 GUI 플레이그라운드
  • jnv - 파이프라인용 터미널 실시간 프리뷰
  • GitHub CLI - 대부분의 응답 및 fetch형 명령어에서 아예 jq 쿼리 옵션이 내장되어 있다.
  • ijq - jq REPL
  • liteJQ - libjq 기반 SQLite jq 확장 모듈
  • pgJQ - PostgreSQL용 jq 문법 및 타입 확장

3.4. 언어 지원

4. 관련 문서