2014-04-24 3 views
10

많은 레벨이있는 ​​임의의 구조가 있습니다. updateDate 키를 포함하는 모든 객체를 선택해야합니다. jq로 어떻게 할 수 있습니까?jq - 주어진 키 이름을 가진 객체를 선택하십시오.

jq 'recurse(.[]) | has("updateDate")' | grep -Fv error 

정말 또한 유형 또는 잎과 I를 확인하는 방법을 이해하지 않습니다 나는 방법 중 하나를 내놓았다하지만 내가 밖으로 grep을해야 리프를 방문 할 때 그것은 또한 잘못된 데이터 유형에 대한 오류를 발생 내가 원하는 것을 성취 할 수있는 더 간단한 방법이 있다고 의심하십니까? 1.4에서

답변

14

당신이 할 수있는 단지 :

jq 'recurse(if type == "array" or type = "object" then .[] else empty end) | if type == "object" then .updateDate else empty end' 
+0

구조체에 배열이 포함되어 있으면이 오류가 발생합니다. 가운데에'| objects |'를 추가하면 고쳐집니다. – Tgr

1

을 테스트하지 : : 방법에 대한 jq 'recurse(.[]?) | objects | has("updateDate")' 당신은 1.3 함께 붙어있는 경우

jq '..|.updateDate?' 

은 당신이 그렇게 같은 이상 프로그램을 사용할 수 있습니까?

+1

재귀 (. []?) | 객체 | 선택 (has ("a")) –

관련 문제