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 이름, 이미지, 라벨 출력

kubectljsonpathcustom-columns 옵션을 사용하여, Pod의 특정 속성들을 출력할 수 있습니다.

kubectl get po -o 'custom-columns=POD:.metadata.name,IMAGE:.spec.containers[0].image,LABEL:.metadata.labels'