jq 명령어는 리눅스 및 유닉스 계열에서 JSON 데이터를 핸들링할 때 사용되는 명령어다.
jq 명령어를 사용하면 JSON 데이터를 분석, 탐색, 추출할 수 있다. 또한, 데이터 필터링, 출력 서식 지정, 데이터 변환 등의 작업도 가능하다.
명령어 기본 문법
jp <option> <filter> <json file>옵션 리스트
-r : json 데이터를 로우 데이터(raw data)로 변환 -s : 여러 json 데이터 파일을 하나의 배열로 결합 -c : json 데이터를 압축하여 한 줄로 출력 (가독성 감소) -M : 색상화 출력 비활성화필터 리스트
. : json 데이터 전체 표시 (json 형태로 표시) '.<key>' : json 데이터 객체 중 특정 키값에 대응하는 값 표시 '.[]' : 배열에서 항목 접근 | : 파이프 연산자로 결과를 이어서 처리 select : 조건에 맞는 항목 필터링 map : 배열의 각 요소에 대한 필터 적용
모든 json 데이터 확인
jq . data.json { "name": "홍길동", "age": 25, "email": "honggildong@example.com", "isStudent": true, "courses": [ { "courseName": "수학", "courseCode": "MATH101", "grade": "A" }, { "courseName": "영어", "courseCode": "ENG202", "grade": "B" } ], "address": { "street": "서울시 강남구", "city": "서울", "postalCode": "06234" } }json 데이터 필터링 (키 참조값 확인)
jq '.name' data.json "홍길동"json 데이터 필터링 (특정 배열 접근)
jq '.courses[]' data.json { "courseName": "수학", "courseCode": "MATH101", "grade": "A" } { "courseName": "영어", "courseCode": "ENG202", "grade": "B" }json 데이터 필터링 (특정 배열 접근 후 키 참조값 확인)
jq '.courses[].courseName' data.json "수학" "영어"json 데이터 수정
jq '.address.street = "서울시 송파구"' data.json { "name": "홍길동", "age": 25, "email": "honggildong@example.com", "isStudent": true, "courses": [ { "courseName": "수학", "courseCode": "MATH101", "grade": "A" }, { "courseName": "영어", "courseCode": "ENG202", "grade": "B" } ], "address": { "street": "서울시 송파구", "city": "서울", "postalCode": "06234" } }json 데이터 재구조화
jq '.courses[] | {name: .courseName, code: .courseCode}' data.json { "name": "수학", "code": "MATH101" } { "name": "영어", "code": "ENG202" }로우 데이터(raw data) 변환
# -r 옵션을 사용하여 "" 제거 (로우 데이터로 변환) jq -r .name data.json 홍길동 jq .name data.json (기본 json 데이터) "홍길동"json 데이터 합치기
# data1.json { "name": "홍길동", "age": 20 } # data2.json { "name": "신짱구", "age": 25 } ------------------------------------------ # data1.json, data2.json 합치기 jq -s . data1.json data2.json [ { "name": "홍길동", "age": 20 }, { "name": "신짱구", "age": 25 } ]json 데이터 압축
jq -c . data.json {"name":"홍길동","age":25,"email":"honggildong@example.com","isStudent":true,"courses":[{"courseName":"수학","courseCode":"MATH101","grade":"A"},{"courseName":"영어","courseCode":"ENG202","grade":"B"}],"address":{"street":"서울시 강남구","city":"서울","postalCode":"06234"}}json 데이터 컬러 비활성화
jq -M . data.jsonjson 데이터 조건 필터링
select 내부에 조건식을 작성하여 데이터 필터링
(등급이 "B"인 데이터만 필터링)jq '.courses[] | select(.grade == "B")' data.json { "courseName": "영어", "courseCode": "ENG202", "grade": "B" }json 데이터 항목 필터링
map 내부에 원하는 항목을 기입하여 필터링
(courseName, grade만 필터링)jq '.courses | map({courseName, grade})' data.json [ { "courseName": "수학", "grade": "A" }, { "courseName": "영어", "grade": "B" } ]