이 바닥을 연 도구야. jq 는 JSON 을 파싱하고, 쿼리를 걸고, 다시 JSON 으로 내보내. 그 필터 문법 (.foo[], map, select) 이 사실상 나머지 도구들의 공용어가 됐어.
yq — 같은 문법, 네 포맷 다
Mike Farah 의 yq 는 jq 의 필터 언어를 YAML, JSON, TOML, XML, CSV 에 그대로 얹었어. yq -p toml -o yaml file.toml 이라고 하면 TOML 을 읽어서 YAML 로 뱉어. 범용 변환 도구로는 이만한 게 없어.
dasel — 여러 포맷 가로지르는 selector
dasel 은 .config.server.port 같은 통일된 selector 문법 하나로 JSON, YAML, TOML, XML, CSV 를 다 다뤄. 단순히 값 하나 꺼내는 데는 yq 보다 가볍고, 변환 쪽 능력은 비슷해.
gron — grep 위해 JSON 평탄화
gron 은 중첩된 JSON 을 줄마다 대입문 하나씩으로 펴줘. json.users[0].name = "Pippa"; 이런 식으로. 그러면 grep 이 JSON 에도 우리가 기대하는 대로 먹혀. gron --ungron 으로 원래 모양을 되돌릴 수도 있고. 깊이 파묻힌 API 응답에서 필드를 찾아내 뽑을 때 정확히 그 자리만 짚어줘.
원칙: jq 의 필터 언어를 한 번만 제대로 배워둬. yq 를 통해 YAML 과 TOML 에서도 그대로 써먹게 되니까. config 감사, 로그 뒤지기, CI 파이프라인 이어붙이기까지 두루 값을 해. YAML 파일 좀 주무르겠다고 Python 을 켜는 순간이 오면, yq 가 있다는 걸 잊은 거야.
실제로 쓰는 config 를 하나 골라. pyproject.toml 이든 Ansible inventory 든 Kubernetes manifest 든. yq 로 나머지 세 포맷으로 각각 바꿔보고 결과를 diff 해. 뭐가 사라지는지 눈으로 확인해 (주석, 그리고 왕복하면 키 순서까지). 마지막으로 제일 자주 쓴 변환 명령을 dotfiles 에 shell 함수로 저장해둬.
Progress
Progress is local-only — sign in to sync across devices.