jq로 JSON 변환하기: 인터랙티브 가이드
(navendu.me)- jq는 JSON 데이터를 다루기 위한 명령줄 도구로, 대부분의 Linux 배포판에 기본 설치되어 있음
- JSON 데이터를 보기 좋게 출력(pretty print)하거나, 필터를 사용해 데이터를 변환하는 데 유용함
- 개발자들이 꼭 배워야 할 5가지 CLI 도구에 포함될 정도로 강력하며, JSON 데이터를 다루는 다양한 작업을 간단히 수행 가능
jq 설치 및 기본 사용법
-
설치 방법
- jq는 대부분의 패키지 관리자에서 설치 가능하며, 직접 바이너리를 다운로드하거나 소스에서 빌드 가능
- 설치 후
jq
명령어를 사용해 작동 확인 가능
-
기본 사용 예
- JSON 데이터를 보기 좋게 출력:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq
- JSON 데이터를 보기 좋게 출력:
-
JSON 필터 예시
- 특정 조건에 맞는 데이터 필터링:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy") | {name, username, email}'
- 특정 조건에 맞는 데이터 필터링:
jq의 주요 기능
기본 필터
-
Identity 필터
- 입력 데이터를 변경 없이 출력:
echo '{"id":1,"name":"Leanne Graham","website":"hildegard.org"}' | jq '.'
- 입력 데이터를 변경 없이 출력:
-
특정 필드 접근
- JSON 객체의 특정 필드 선택:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name'
- 중첩 필드 접근:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.address.zipcode'
- JSON 객체의 특정 필드 선택:
배열 처리
-
배열 요소 접근
- JSON 배열에서 특정 인덱스의 요소 선택:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[0]'
- JSON 배열에서 특정 인덱스의 요소 선택:
-
배열 슬라이싱
- 특정 범위의 하위 배열 추출:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[3:6]'
- 특정 범위의 하위 배열 추출:
-
배열 반복 처리
- 배열의 각 요소에 대해 필터 적용:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[] | {name, email}'
- 배열의 각 요소에 대해 필터 적용:
새 JSON 생성
-
새 객체 생성
- 선택한 필드로 새로운 JSON 객체 생성:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq \ '{"name": .name, "email": .email, "company": .company.name}'
- 선택한 필드로 새로운 JSON 객체 생성:
-
새 배열 생성
- 변환된 데이터로 배열 생성:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '[.[] | {name: .name, email: .email, company: .company.name}]'
- 변환된 데이터로 배열 생성:
jq 고급 기능
함수 활용
-
길이 계산
- 문자열 길이 계산:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name | length'
- 문자열 길이 계산:
-
키 추출
- 객체의 키를 배열로 반환:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq 'keys'
- 객체의 키를 배열로 반환:
-
맵 함수
- 배열의 각 요소에 필터 적용:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'map({name: .name, city: .address.city})'
- 배열의 각 요소에 필터 적용:
데이터 선택
-
조건에 맞는 데이터 선택
- 특정 조건을 만족하는 데이터 필터링:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy")'
- 특정 조건을 만족하는 데이터 필터링:
JSON 변환과 활용
-
고급 JSON 변환
- 데이터를 그룹화하거나 통계를 계산하는 필터:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'group_by(.address.city) | map({ city: .[0].address.city, user_count: length, users: [.[] | {name: .name, username: .username}] })'
- 데이터를 그룹화하거나 통계를 계산하는 필터:
-
대규모 JSON 처리
- 대량의 JSON 데이터를 효율적으로 처리:
curl 'https://api.github.com/repos/apache/apisix/contributors?per_page=100' | jq \ 'sort_by(.contributions) | reverse | map({username: .login, contributions}) | .[0:5]'
- 대량의 JSON 데이터를 효율적으로 처리:
-
jq Playground에서 실습해보기 가능
개발자들이 꼭 배워야 할 5가지 CLI 도구에 포함될 정도로 강력하며,
그런데 나머지 4개 CLI 도구가 무엇인지도 궁금한데, 그건 글에는 언급이 안되어서 맥거핀화됬네요..