# jq로 JSON 변환하기: 인터랙티브 가이드

> Clean Markdown view of GeekNews topic #18213. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18213](https://news.hada.io/topic?id=18213)
- GeekNews Markdown: [https://news.hada.io/topic/18213.md](https://news.hada.io/topic/18213.md)
- Type: news
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-12-12T10:37:02+09:00
- Updated: 2024-12-12T10:37:02+09:00
- Original source: [navendu.me](https://navendu.me/posts/jq-interactive-guide/)
- Points: 29
- Comments: 3

## Summary

jq는 JSON 데이터를 다루기 위한 강력한 명령줄 도구로, 대부분의 Linux 배포판에 기본 설치되어 있으며, JSON 데이터를 보기 좋게 출력하거나 필터를 사용해 데이터를 변환하는 데 유용합니다. jq는 JSON 객체의 특정 필드 선택, 배열 요소 접근, 새로운 JSON 객체 및 배열 생성 등 다양한 기능을 제공하며, 고급 기능으로는 문자열 길이 계산, 객체의 키 추출, 조건에 맞는 데이터 선택 등을 제공합니다. Playground 에서 실습도 가능합니다.

## Topic Body

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

## Comments



### Comment 32273

- Author: greenhead
- Created: 2024-12-12T11:59:57+09:00
- Points: 1

요약 감사합니다! 진짜 꿀정보네요

### Comment 32274

- Author: greenhead
- Created: 2024-12-12T12:02:13+09:00
- Points: 2
- Parent comment: 32273
- Depth: 1

> 개발자들이 꼭 배워야 할 5가지 CLI 도구에 포함될 정도로 강력하며,  
  
그런데 나머지 4개 CLI 도구가 무엇인지도 궁금한데, 그건 글에는 언급이 안되어서 맥거핀화됬네요..

### Comment 32280

- Author: ycs1m1yk
- Created: 2024-12-12T12:40:13+09:00
- Points: 1
- Parent comment: 32274
- Depth: 2

https://navendu.me/posts/jq-interactive-guide/#:~:text=jq%20is%20on%20every%20%E2%80%9Cfive%20command%20line%20tools%20to%20learn%20as%20a%20developer%E2%80%9D%20video%20on%20YouTube.  
  
원문을 보니  
>  jq is on every “five command line tools to learn as a developer” video on YouTube.  
라는 문구가 있네요.  
  
나머지 4개가 특정된게 아니고, 저런류의 CLI tool 추천 영상에 항상 언급되나 봐요ㅋㅋ
