본문 바로가기
LINUX

jq를 이용하여 json 값 추출

by Rainbound-IT 2022. 10. 12.
반응형

목차

     

    요즘 json 많이 사용하므로 jq를 사용하는게 굉장히 편리합니다.

     

     

     

    설치

    jq 설치는 간단합니다.

     

    apt install jq

    위 명령어만 입력해주면 됩니다.

     

     

     

    사용방법

    사용방법은 다음과 같습니다.

    jq .key *.json

     

    jq [옵션] [.추출할 키] [json파일]

    이런식입니다.

     

    근데 이게 좀 독특한게 

     

    키 다음 키 있을경우

    보통 .키.키 

    마침표를 찍으면 잘 출력이 되는데

    json에서 대괄호, 중괄호로 섞여 묶여 있는경우는  꼬일때도 있습니다.

     

     

    예제

     

    {
      "entries": [
        {
          "Name": "cat",
          "size": "100"
        },
        {
          "Name": "dog",
          "size": "200"
        }
      ]
    }

    이런 test.json 파일이 있습니다.

    여기서 Name의 value 값을 공백포함에서 출력하고 싶습니다.

     

    jq -c .entries.Name test.json

    하면 공백은 없어도 한줄로는 출력이 될줄 알았으나 안되더군요.

    대괄호는 다른 옵션을 줘야하나 봅니다.

     

    jq -r '.entries | map(.Name) | join(" ")' test.json

     

    다음과 같이 하면

    cat dog 

    이런식으로 출력되는것을 확인하실수 있습니다.

     

     

     

    windows 에서 jq

    그대로 치면 다음과 같은 에러가 발생합니다.

    jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Windows cmd shell quoting issues?) at <top-level>, line 1:

     

    " 쌍따옴표인 경우 앞에 백슬러쉬를 해줘야합니다.

     

    jq -r '.entries | map(.Name) | join(\" \")' test.json

    이런식으로 말이죠.

     

     

    https://stackoverflow.com/questions/54683103/simple-jq-filters-not-working-in-windows-shell-various-quoting-issues

     

    Simple jq filters not working in Windows shell, various quoting issues

    I am trying really hard to get the Windows shell working with jq and failing miserably. I want this type of thing to work echo '["a","b","c"]' | .\Downloads\jq.exe -r '{ "data": map({ "{#SNAME}...

    stackoverflow.com

     

     

     

     

     

     

     

     

    Reference

     

    jq 공식 메뉴얼

    https://stedolan.github.io/jq/manual/

     

    jq Manual (development version)

    jq Manual (development version) For released versions, see jq 1.6, jq 1.5, jq 1.4 or jq 1.3. A jq program is a "filter": it takes an input, and produces an output. There are a lot of builtin filters for extracting a particular field of an object, or conver

    stedolan.github.io

     

     

     

    https://stackoverflow.com/questions/69198107/extract-values-from-json-using-jq

     

    extract values from JSON using jq

    I have a JSON object that looks like this: { "Accounts": [ { "Id": "1", "Name": "Joe", "Zip&qu...

    stackoverflow.com

     

    jq 옵션만 정리

    https://fig.io/manual/jq

     

    Fig

    The next-generation command line.

    fig.io

     

    커맨드라인 JSON 프로세서 jq : 기초 문법과 작동원리 | 44BITS

     

    커맨드라인 JSON 프로세서 jq : 기초 문법과 작동원리

    jq는 커맨드 라인 JSON 프로세서입니다. JSON 데이터를 입력받아 데이터를 필터링하거나 변형합니다. jq의 기본적인 문법과 작동 원리를 소개합니다.

    www.44bits.io

     

     

     

     

     

    반응형

    댓글