2016-07-28 2 views
1

나는 객체 같이 있습니다JQ 삭제 여러 속성은

{ 
    "a" : 1, 
    "b" : { 
     "c" : { 
      "c1" : "abc", 
      "source" : "abcxyz" 
     }, 
     "d" : { 
      "d1" : "abcd", 
      "source" : "abcxyz" 
     }, 
     "e" : { 
      "e1" : "abcde", 
      "source" : "abcxyz" 
     } 
    } 
} 

내 기대는 내가 "소스"속성을 제거 할

{ 
    "a" : 1, 
    "b" : { 
     "c" : { 
      "c1" : "abc" 
     }, 
     "d" : { 
      "d1" : "abcd" 
     }, 
     "e" : { 
      "e1" : "abcde" 
     } 
    } 
} 

입니다. 동적 인 "c", "d"또는 "e"키를 지정하지 않고 어떻게 수행 할 수 있습니까?

답변

1

전체 t 반복 .b에서 그 요소는 다음 그들로부터 .source 요소를 제거의 결과에 자신의 값을 설정 :

여기
.b[] |= del(.source) 
+0

그것은 작동합니다. 고맙습니다. @Santiago –

0

jq의 다음 릴리스에 내장 기능 walk/1을 사용할 수 있습니다. 그러나 현재 JQ-1.5 walk/1을 그래서 당신은 hoo.jq

def walk(f): 
    . as $in 
    | if type == "object" then 
     reduce keys[] as $key 
     ({}; . + { ($key): ($in[$key] | walk(f)) }) | f 
    elif type == "array" then map(walk(f)) | f 
    else f 
    end; 

walk(if type == "object" then del(.source) else . end) 

실행

$ jq -f hoo.jq < YOUR_JSON.json 

참고로 다음 코드를 저장 buitin.jq https://github.com/stedolan/jq/blob/master/src/builtin.jq

에서 복사 할 필요가 없습니다 : recursive reduce arrays using jq

+0

입니다. 하지만 컴파일 오류가 발생했습니다 : '오류 : 구문 오류, 예기치 않은 INVALID_CHARACTER'. 어떻게 해결할 수 있습니까? 고마워요 –

0

내가 hoo.jq 파일을 생성 명령을 실행하여 다른 솔루션

del(.b[].source)