명령어/Linux

[리눅스] jq 커맨드라인에서 JSON 다루기

jykim23 2026. 7. 16. 17:48
반응형

부제: 필터 하나로 JSON을 뽑고 걸러내고 변형한다

jq '.database' config.json        # database 객체만 추출
jq -r '.features[]' config.json   # 배열 원소를 따옴표 없이 한 줄씩
jq '.replicas * .database.pool' config.json  # 값 계산
$ jq --version
jq-1.6

$ jq '.database' config.json
{
  "host": "db.internal",
  "port": 5432,
  "pool": 10
}

$ jq -r '.features[]' config.json
auth
ratelimit
metrics

$ jq '.replicas * .database.pool' config.json
30

jq는 JSON을 다루는 sed/awk에 해당한다. .key, .array[], select() 같은 필터 문법으로 원하는 값을 뽑고 걸러내고 새 구조로 바꾼다. API 응답을 grep으로 억지로 파싱하던 방식과 달리 문서 구조를 그대로 이해하기 때문에 중첩된 값도 정확히 짚는다. -r은 문자열을 따옴표 없이 뽑아 셸에서 바로 쓰기 좋고, -c는 한 줄로 압축한다. 데비안은 apt install jq, RHEL 계열은 EPEL을 켜고 dnf install jq로 설치한다.

이렇게도 쓴다

중첩된 값을 경로로 바로 짚는다.

jq '.database.host' config.json

 

배열 원소를 구분자로 이어 붙인다.

jq -r '.features | join(",")' config.json

 

객체의 키 목록만 뽑는다.

jq 'keys' config.json

 

조건에 맞는 원소만 걸러낸다.

jq '.ports[] | select(. > 8000)' config.json

 

API 응답에서 필요한 필드만 바로 추출한다. (curl + jq 조합)

curl -s https://api.github.com/repos/jqlang/jq | jq '.stargazers_count'

 

여러 필드를 새 객체로 재구성한다.

jq '{name: .service, ver: .version}' config.json
반응형