JSONPath 활용법
JSONPath 개요
JSONPath는 JSON 포맷의 데이터 구조를 손쉽게 처리할 수 있도록 고안된 표현식입니다. 2007년 Stefan Gossner 교수가 최초로 제안한 이후로 지금까지 널리 사용되고 있습니다.
JSONPath 기본 문법
$
: 전체 문서를 의미합니다.@
: 현재 노드를 가리킵니다..
: 하위 노드를 탐색할 때 사용됩니다...
: 중첩된 전체 하위 요소를 탐색합니다.[]
: 배열 인덱스를 지정할 때 사용합니다.?()
: 조건부 필터 표현식을 적용합니다.range
: 반복문과 유사한 기능을 제공합니다.
예제
아래는 JSON 데이터를 대상으로 JSONPath를 활용하는 예제입니다.
{
"store": {
"book": [
{ "category": "fiction", "author": "Hemingway" },
{ "category": "science", "author": "Hawking" }
]
}
}
$.store.book[*].author
: 모든 책의 저자를 선택합니다.$..author
: 모든 저자를 선택합니다.$..book[0]
: 첫 번째 책을 선택합니다.$..book[?(@.category=='fiction')]
: 카테고리가fiction
인 책을 선택합니다.
kubectl에서 JSONPath 활용
Kubernetes에서 kubectl
명령어와 JSONPath를 함께 사용하면, 클러스터 리소스를 효율적으로 관리할 수 있습니다.
예제 1: 모든 Pod 이름 출력
kubectl get po -o jsonpath="{.items[*].metadata.name}"
예제 2: 상태별로 Pod 삭제 명령어 생성
kubectl
과 JSONPath를 조합하여, 특정 조건에 맞는 리소스를 선택적으로 삭제할 수 있습니다.
kubectl get po -o jsonpath="{range.items[?(@.status.phase=='Failed')]}{.metadata.name}{'\n'}{end}" | xargs kubectl delete po
예제 3: Pod 이름, 이미지, 라벨 출력
kubectl
의 jsonpath
와 custom-columns
옵션을 사용하여, Pod의 특정 속성들을 출력할 수 있습니다.
kubectl get po -o 'custom-columns=POD:.metadata.name,IMAGE:.spec.containers[0].image,LABEL:.metadata.labels'