jq로 json 데이터 다루기

Jan 20, 2016 • etc


들어가는 말

jenkins 등으로 CI를 구성했을 때 변수를 프로젝트 내부의 json 파일에서 변수를 읽어서 shell로 전달해야할 경우가 있다.

이럴 때 jq를 활용하여 처리하는 방법을 알아보도록 하자.


jq 설치

jq는 command line으로 JSON을 다룰 수 있도록 해준다.

jq is a lightweight and flexible command-line JSON processor. - jq 공식홈페이지 발췌

jq 공식 홈페이지에 접속해서 download 받아서 설치하면 된다.

linux 환경이라면 32bit나 64bit에 따라 아래 명령중 하나를 실행하여 직접 다운받을 수 있다.

$ wget http://stedolan.github.io/jq/download/linux32/jq
$ wget http://stedolan.github.io/jq/download/linux64/jq

jq 활용

example.json 예시

example.json 파일이 있다고 해보자.

{
    "dev": {
        "name": "dev",
        "version": 2
    },
    "production": {
        "name": "release",
        "version": 1
    }
}

jq로 json 파일의 특정 내용 조회

productionversion을 읽기 위해서는 다음과 같이 커맨드라인에서 입력하면 된다.

$ cat example.json | jq .production.version

cat 명령어는 텍스트로 된 파일의 내용을 확인할 때 사용한다.

| (파이프)는 왼쪽 명령의 결과를 오른쪽에 전달한다.

위 명령을 해석하면 cat으로 excample.json 파일을 읽어서 jq에 전달한 것이다.

그리고 jq 뒤에 .production.version는 필터에 해당한다.

.production 만 입력하면 production의 내용 전체를 보여준다. 그 뒤에 .version을 입력하여 production 안의 version을 확인한 것이다.

출력 결과는 1 이다.


Shell에서 변수로 저장하기

생성된 결과를 Shell에 변수로 등록하는 것은 간단하다.

$ totuworld=$(cat example.json | jq .production.version)

변수명(여기서는 totuworld)을 입력하고 =$()로 명령을 감싸면 된다.

echo 명령어로 값을 확인할 수 있다.

$ echo $totuworld

맺음말

jq는 튜토리얼이나 메뉴얼도 잘 되어있고 온라인에서 테스트할 수 있는 페이지도 있으니 확인해보기 바란다.


Buy me a latteBuy me a latte