2017-10-30 4 views
0

이제 막 JQ, a JSON command line tool으로 재생 중입니다. 비교적 간단한 문제로 나를 도울 수있는 리소스를 찾을 수 없었습니다.jq가있는 부모 개체에서 키를 제거

유스 케이스는 JSON 파일이 필요하지 않은 모든 종류의 추가 작업 (500MB 이상)이 있으며 특정 키의 데이터를 죽일 수 있다면 거의 1MB로 줄어 듭니다.

{ 
    "pages": { 
    "elems": { ... stuff ... } 
    }, 
    "actions": { 
    "pages": { ... stuff ... } 
    } 
} 

내가 1 수준 pages 전체 객체와 키를 삭제할 수 있지만 낮은 수준을 유지하기 위해 실행됩니다 명령 어떤 종류의 pages 그대로 :

나는 다음과 같은 JSON을 척?

예상 출력 : jq -c 'del(.pages)' myfile.json >outputfile.json 를하지만 같은 결과뿐만 아니라 pages라고 모든 어린이의 키를 파기 듯 :

{ 
    "actions": { 
    "pages": { ... stuff ... } 
    } 
} 

나는 실행 시도 어떤 도움을 주시면 감사하겠습니다

{ 
    "actions": {} 
} 

.

+0

은 1.5에서 잘 작동합니다. 재현 할 수 없습니다 – RomanPerekhrest

+0

도 jq 1.3 및 jq 1.4에서 잘 작동합니다 (!). – peak

답변

0

원래 시도가 예상대로 작동해야한다고 생각합니다.

$ jq -M 'del(.pages)' myfile.json 
{ 
    "actions": { 
    "pages": { 
     "stuff": "..." 
    } 
    } 
} 

Try it online at jqplay.org

이 입력 파일이 매우이기 때문에 당신이

$ jq -M 'del(.. | .pages?)' myfile.json 
{ 
    "actions": {} 
} 

Try it online at jqplay.org

0

같은 것을 필요 사방 모든 페이지를 제거하려면 : 나는 그것을 할 때 여기에 내가 무엇을 얻을 큰 경우 jq 1.5의 스트리밍 파서를 사용하는 것이 좋습니다.

jq -n --stream ' 
    fromstream(inputs|select((length == 2 and .[0][0] == "pages")|not)) 
' input.json