jq의 사용 방법 총결

24630 단어 JSONjqtech
jq의 사용 방법은 적합한 곳과 편리한 사용 방법을 총결하였다.
https://stedolan.github.io/jq/manual/

그 다음에 []등을 추가하는 방법


전에 ,가 없었으면 error가 나올 것 같았어요(심리적 작용일지도 몰라요. 제가 해봤어요)현재,가 없어도 다음 json에는 error가 나타나지 않기 때문에 나중에 추가적인 방법을 사용할 수 있습니다.[1]하고 싶어서 추가[]도 했어요.
  • jq -s ".|= .+[]"
  • { 
     "user" : "syui",
     "id" : "1"
    }
    { 
     "user" : "test",
     "id" : "2"
    }
    
    $ cat tmp.json|jq -s ".|= .+[]"
    [
    	{ 
    	 "user" : "syui",
    	 "id" : "1"
    	},
    	{ 
    	 "user" : "test",
    	 "id" : "2"
    	}
    ]
    

    U+0000 error의 경우

    jq-1.5부터 줄 바꾸기를 포함하면 다음과 같은 error가 발생합니다. 정말 번거롭습니다.
    $ echo "{\"text\":\"$text\"}"|jq .
    parse error: Invalid string: control characters from U+0000-through-U+001F must be escaped at line 3, column 23
    
    의 주요 회피 전략은 다음과 같다.특수 문자 등이 포함된 경우에도 유효합니다.
  • jq -n --arg var "$var"
  • jq -R tmp.txt
  • $ jq -n --arg text "$text" "{\"text\":\$text}"
    
    $ text=`echo $text | jq -R`
    $ echo "{\"text\":$text}" | jq .
    
    \$text$text의 차이점을 주의하십시오.

    줄 바꿈 삭제

  • jq <<< $text
  • $ jq . <<< $text
    

    큰따옴표 취소 시


    이것은 -r의 옵션입니다.자주 사용하지만 간과하기 쉽다.
  • jq -r ".user"
  • $ cat tmp.json|jq -r ".[].user"
    syui
    test
    

    키 추출 값을 지정할 때

  • jq "select(.name == \"syui\")
  • $ cat tmp.json
    [
    	{ 
    	 "user" : "syui",
    	 "id" : "1"
    	},
    	{ 
    	 "user" : "test",
    	 "id" : "2"
    	}
    ]
    
    $ cat tmp.json|jq -r ".[]|select(.user == \"syui\")"
    {
      "user": "syui",
      "id": "1"
    }
    
    

    키가 있으면 그 키의 값을 꺼내는 경우


    null를 조건으로 검색합니다.
  • jq "select(.user !=null)"
  • $ cat tmp.json
    [
    	{ 
    	 "user" : "syui",
    	 "id" : "1"
    	},
    	{ 
    	 "user" : "test",
    	 "id" : "2"
    	}
    ]
    
    $ cat tmp.json|jq -r ".[]|select(.user !=null)|.user"
    syui
    test
    

    배열 수를 찾을 때

  • jq length
  • $ cat tmp.json
    [
    	{ 
    	 "user" : "syui",
    	 "id" : "1",
    	 "link" : "syui.cf"
    	},
    	{ 
    	 "user" : "test",
    	 "id" : "2",
    	 "link" : "example.com"
    	}
    ]
    
    $ cat tmp.json|jq length
    2
    
    $ cat tmp.json|jq ".[]|length"
    3
    3
    
    $ cat tmp.json|jq ".[]|select(.user == \"syui\")|length"
    3
    

    키가 있는지 없는지 알아봐.

  • jq "has(\"user\")"
  • $ cat tmp.json|jq ".[]|has(\"user\")"
    true
    true
    

    두 파일을 병합할 때

  • jq -s add tmp.json tmp2.json
  • 다음 두 개의 파일이 있다고 가정해 보세요.
    [
    	{ 
    	 "user" : "syui",
    	 "id" : "1",
    	 "link" : "syui.cf"
    	},
    	{ 
    	 "user" : "test",
    	 "id" : "2",
    	 "link" : "example.com"
    	},
    	{ 
    	 "user" : "github",
    	 "id" : "3",
    	 "link" : "github.com"
    	},
    ]
    
    [
    	{ 
    	 "user" : "github",
    	 "id" : "3",
    	 "link" : "github.com"
    	},
    	{ 
    	 "user" : "zenn",
    	 "id" : "4",
    	 "link" : "zenn.dev"
    	}
    ]
    
    는 이런 내용을 간단하게 요약한다jq -s add.
    $ jq -s add tmp.json tmp2.json
    [
      {
        "user": "syui",
        "id": "1",
        "link": "syui.cf"
      },
      {
        "user": "test",
        "id": "2",
        "link": "example.com"
      },
      {
        "user": "github",
        "id": "3",
        "link": "github.com"
      },
      {
        "user": "github",
        "id": "3",
        "link": "github.com"
      },
      {
        "user": "zenn",
        "id": "4",
        "link": "zenn.dev"
      }
    ]
    

    중복 키가 있는 파일을 병합할 때


    이것은 둘이 같은 키를 가지고 있을 때만 유효하다.다음 두 파일user:syui이 중복됩니다.
    따라서 단순하게 add하면 둘 다 남는다.
    나는 이것을 하나의 장면으로 통합시키고 싶다.
  • jq -s '.[0] * .[1]' tmp.json tmp2.json
  • {
      "var": {
        "aaa": {
          "user": "syui",
          "id": "1",
          "link": "syui.cf"
        },
        "bbb": {
          "user": "test",
          "id": "2",
          "link": "example.com"
        }
      }
    }
    
    {
      "var": {
        "aaa": {
          "user": "syui",
          "id": "1",
          "link": "syui.cf"
        },
        "ccc": {
          "user": "github",
          "id": "3",
          "link": "github.com"
        }
      }
    }
    
    $ jq -s '.[0] * .[1]' tmp.json tmp2.json
    {
      "var": {
        "aaa": {
          "user": "syui",
          "id": "1",
          "link": "syui.cf"
        },
        "bbb": {
          "user": "test",
          "id": "2",
          "link": "example.com"
        },
        "ccc": {
          "user": "github",
          "id": "3",
          "link": "github.com"
        }
      }
    }
    

    여러 키 검색 시

  • jq ".[]|.user,.id"
  • $ cat tmp.json|jq ".[]|.user,.id"
    "syui"
    "1"
    "test"
    "2"
    "github"
    "3"
    

    배열 번호로 배열을 추출할 때

  • jq ".[1]"
  • $ cat tmp.json|jq "keys|.[]"
    0
    1
    2
    
    $ cat tmp.json|jq ".[1]"
    {
      "user": "test",
      "id": "2",
      "link": "example.com"
    }
    
    0부터 시작했기 때문에 최초의 배열을 꺼내려면.[0]으로 한다.

    키만 꺼낸 경우.

  • jq ".[]|keys"
  • $ cat tmp.json|jq ".[]|keys|.[]"
    "id"
    "link"
    "user"
    "id"
    "link"
    "user"
    "id"
    "link"
    "user"
    

    좋은 웹페이지 즐겨찾기