Search

jq로 필드 추출 및 특정 형태 출력

Tags
unix
jq
json
formatting
Created
2024/05/02 16:25
Created time
2024/05/02 07:27
category
unix

개요

JSON으로 객체를 받는 경우, 객체 내 특정 값을 뽑아내고 싶을 때 어떤 식으로 jq를 응용할 수 있는지 탐색
또한 특정 필드를 추출한 경우, 해당 값을 어떤 형식으로 표준 출력을 내보낼 수 있는지 탐색

가정

별도로 curl 요청을 보낸 응답을 이용하는 것은 아니고 아래와 같은 형태의 명령어로 JSON 객체를 만들어서 이용
echo '{ "Content-Type" : "application/json", "msg": { "text" : "hello world", "test" : "test" } }' | jq
Bash
복사

특정 필드 추출

jq는 json path를 이용하기 때문에 jq의 인자로 json path를 기재하면 필드를 추출할 수 있음
위 객체에서 msg 필드만 추출하고 싶은 경우 '.msg' 와 같이 명시
jq '.msg'
Bash
복사

특정 형태 출력

현재 출력은 중괄호를 포함하고 있고, double-quote와 colon도 표기되어 있음
특정 형태를 강제하고 싶다면 json path 뒤로 파이프를 기재하여 입력 형태를 정의 가능
파이프로 기재하는 부분은 각 key-value 쌍 형태로 만들어주는 to_entries[]와 key-value
** key는 \(.key), value는 \(.value)를 의미
column으로만 구분된 형태로 기재하고 싶은 경우 아래와 같이 이용
jq '.msg | to_entries[] | "\(.key) : \(.value)"'
Bash
복사
** 위는 double-qoute를 포함하고 있는 객체 형태의 출력인데, 문자열 형태의 raw-output으로 활용하고 싶다면 -r 옵션을 붙이면 곧바로 표준 출력으로 내보내기 편한 형태가 됨
jq -r '.msg | to_entries[] | "\(.key) : \(.value)"'
Bash
복사

참고