2017-01-16 2 views
0

저는 jq를 사용하여 cURL 응답을 구문 분석하고 수정하며 하나만 제외하고 모든 요구 사항에 완벽하게 작동합니다. 그래서 마지막 디렉토리 경로에서 제거Bash jq modify json : get 및 set

A) 입력 JSON

[ 
    { 
     "id": 169, 
     "path": "dir1/dir2" 
    } 
] 

B) 출력 JSON

[ 
    { 
     "id": 169, 
     "path": "dir1" 
    } 
] 

: 나는처럼 JSON에 키 값을 수정하고 싶습니다.

curl --header -X GET -k "${URL}" | jq '[.[] | {id: .id, path: .path_with_namespace}]' | jq '(.[] | .path) = "${.path%/*}"' 

마지막 파이프 당연히 정확하지 않은 내가 붙어 곳이다 : 나는 스크립트를 사용합니다. 요점은 path 값을 얻고 수정하는 것입니다. 어떤 도움을 주셔서 감사합니다.

답변

2

이 작업을 수행하는 한 가지 방법은 splitjoin을 사용하여 경로를 처리하고 을 사용하여 올바른 표현식을 .path 특성에 바인딩하는 것입니다.

  • split("/")

    ... | jq '.[] | .path|=(split("/")[:-1]|join("/")) 
    
    문자열 소요
  • x[:-1] 모든 이루어진 배열되지만 x
  • join("/")의 마지막 요소를 반환 배열을 반환 하나를 반환 /와 수신 배열의 요소를 결합한 끈.
  • .path|=x.path의 값을 취하여 x 필터를 통해 입력하고 결과 값을 다시 .path에 할당합니다.
+0

완벽한 덕분에 : D – Sid