1. 개요
JSON 문서를 조회하고 스크립팅하기 위해 사용하는 쿼리 언어 및 이를 지원하는 CLI 유틸리티.2. 문법
유닉스 파이프라인, 함수형 언어와 비슷하게|
를 기반으로 여러 개의 필터를 순서대로 거쳐 문서를 해석한다. 만약 이전 필터에서 여러 개의 문서가 전달되었을 경우, 개별 문서에 필터를 동시에 적용한다. 함수형 언어의 map을 생각하면 좋다.주어진 문서에서 특정 필드를 찾는 필터는
.<필드명>
이다. 예를 들어, foo
필드 하위 객체의 bar
필드 내용을 찾는다면 다음과 같이 할 수 있다..foo | .bar
이러한 패턴은 자주 쓰이기에 |
를 생략하고 한번에 붙혀 쓸 수 있다..foo.bar
인덱스는 .[<인덱스>]
필터로 접근한다. 이 문법도 자주 쓰이기에 일반적인 JavaScript 문법과 마찬가지로 [<인덱스>]
처럼 쓸 수 있다..foo.bar[4]
이 때, 인덱스를 생략하면 해당 배열의 모든 문서를 각각의 개별 문서로 넘긴다. 상술했듯이 이렇게 되면 이어지는 필터 명령들이 개별 항목별로 따로 실행된다. 예를 들어, 회사원의 모든 이름을 출력하는 쿼리는 다음과 같이 작성할 수 있다..employees[].name
필터에는 기본적인 연산과 함수 사용이 가능하다. 예를 들어 직원의 이름이 단일 문자열 필드가 아니라 성과 이름이 별도의 필드로 나뉘어져 있을 경우, 다음과 같이 성과 이름을 합쳐 출력이 가능하다..employees[] | .firstname + " " + .lastname
3. 파생 소프트웨어
3.1. 구현체 및 바인딩
- jq - 원조 C 구현체.
- libjq - 라이브러리
- jq-web -
libjq
를 Emscripten로 컴파일한 WebAssembly 구현체. - libjq-go -
libjq
를 CGO 바인딩으로 연결한 Go 바인딩. - gojq - Go 구현체.
- jaq - Rust 구현체.
- xq - 또 다른 Rust 구현체.
- jqjq - 무려 jq로 구현한 jq 구현체(!).
- query-json - ReasonML 구현체.
- jqjs - JavaScript 구현체.
- micro-jq - TypeScript 구현체. 기능 일부만 지원한다.
3.2. jq를 개선한 소프트웨어
- faq - JSON뿐만 아니라 XML, YAML 등도 처리할 수 있는 버전.
libjq
를 사용한다. - jqunit - jq언어를 사용한 유닛 테스트 프레임워크
- yq - YAML, XML 지원
- jq-jsonpointer - JSON poiner 확장 지원
- json5.jq - JSON5 확장 문법 지원 구현체
3.3. jq를 사용하는 소프트웨어
- jqp - 터미널 실시간 플레이그라운드
- jqi - macOS용 GUI 플레이그라운드
- jqview - Qt 기반 GUI 플레이그라운드
- jnv - 파이프라인용 터미널 실시간 프리뷰
- ijq - jq REPL
- liteJQ -
libjq
기반 SQLite jq 확장 모듈 - pgJQ - PostgreSQL용 jq 문법 및 타입 확장
3.4. 언어 지원
- vscode-jq - Visual Studio Code 지원 확장
- jq-lsp - LSP 구현체
- tree-sitter-jq - Tree-sitter 문법 파서 구현체
- vim-jqplay - vim 인터랙티브 확장
- jq-playground.nvim - Neovim 확장
- virtual-json-viewer - 브라우저 확장 JSON 응답 뷰어