블로그 목록

JSONPath 배열 필터로 조건에 맞는 객체만 추출하는 표현식 사용법

배열에서 조건에 맞는 객체만 고르려면 `$['items'][?(@['active'] == true)]`처럼 배열 선택자 뒤에 필터를 쓰고, @로 현재 후보 객체의 속성을 참조하세요. 먼저 작은 JSON에서 한 조건씩 검증하고, 정규식이나 사용자 정의 함수는 구현체 확장일 수 있으므로 RFC 9535 지원 여부를 확인해야 합니다.

JSONPath가 값을 바꾸는 쿼리라고 생각하면 결과가 예상과 달라집니다. 필터는 입력 배열의 각 항목을 후보로 평가해 일치하는 노드를 선택하므로, 선택할 배열 경로와 현재 노드 기준을 먼저 분리해야 합니다.

먼저 보는 핵심 요약

  • $는 루트 값을, @는 필터가 현재 평가 중인 배열 항목을 가리킵니다.
  • 여러 조건을 조합하기 전에 속성 하나의 존재와 타입, 비교값이 입력 JSON과 맞는지 확인합니다.
  • RFC 표준 문법과 라이브러리별 확장 문법을 구분하고 실제 운영 구현체에서 같은 결과가 나는지 테스트합니다.

배열 경로와 필터 대상을 먼저 정하는 법

`$['items']`가 배열을 가리키는지 확인한 뒤 그 뒤에 `[?(...)]` 필터 선택자를 붙입니다. 배열이 아니라 객체 하나를 선택한 상태라면 기대한 반복 평가가 일어나지 않습니다. 중첩 구조에서는 필터 앞까지의 경로를 단계별로 실행해 각 결과의 타입을 확인하세요.

@로 현재 객체의 속성을 참조하는 방법

필터 안의 @는 현재 후보 노드입니다. 객체 속성은 `@['price']`처럼 이름 선택자로 접근하고 비교 연산을 적용합니다. 점 표기는 간결하지만 공백, 하이픈, 특수문자가 있는 키는 대괄호와 따옴표 표기가 명확합니다. 숫자와 문자열을 같은 값으로 가정하지 말고 JSON 타입을 유지하세요.

누락된 속성과 null을 따로 테스트해야 하는 이유

어떤 객체에 속성이 없고 다른 객체에는 값이 null일 수 있습니다. 두 경우를 같은 것으로 가정한 조건식은 구현 차이나 비교 규칙 때문에 예상하지 못한 항목을 고를 수 있습니다. 존재 여부를 확인하는 필터와 값 비교 필터를 작은 표본에 각각 적용해 결과 노드 목록을 확인하세요.

라이브러리별 JSONPath 방언을 피하는 방법

JSONPath는 RFC 9535로 표준화됐지만 기존 라이브러리에는 서로 다른 정규식 표기, 스크립트 식, 함수가 남아 있을 수 있습니다. 웹 테스터에서 성공한 표현식을 바로 코드에 넣지 말고 사용하는 언어 라이브러리의 RFC 지원 범위와 반환 형식을 확인합니다. 이식성이 중요하면 표준 선택자와 비교부터 사용하세요.

단계별로 확인하는 방법

  1. 입력 배열 경로 확인하기

    필터를 붙이기 전 경로만 실행해 결과가 실제 배열이고 예상 항목을 포함하는지 확인합니다.

  2. 한 조건으로 필터 만들기

    현재 노드 @에서 속성 하나를 선택하고 입력 JSON과 같은 타입의 값으로 비교합니다.

  3. 경계 사례 추가하기

    속성 누락, null, 0, 빈 문자열, 다른 타입을 가진 항목을 넣어 선택 결과를 확인합니다.

  4. 운영 라이브러리에서 재검증하기

    테스터와 실제 코드가 같은 JSONPath 규격과 반환 방식을 사용하는지 테스트로 고정합니다.

판단 기준을 한눈에 비교하기

확인 항목판단 기준
`$`입력 JSON의 루트 노드를 가리킵니다.
`@`필터가 현재 평가하고 있는 후보 노드를 가리킵니다.
`[*]`배열 또는 객체의 모든 자식 노드를 선택하는 와일드카드입니다.
`[?(...)]`논리 표현식이 참인 배열 항목을 선택하는 필터 선택자입니다.

실행 전 체크리스트

  • 필터 앞 경로의 결과가 배열인지 확인했나요?
  • 비교하는 숫자·문자열·불리언 타입이 맞나요?
  • 속성 누락과 null을 각각 테스트했나요?
  • 운영 라이브러리가 RFC 9535 문법을 지원하나요?

주의할 점

일부 JSONPath 도구는 호스트 언어의 임의 스크립트 실행이나 자체 정규식 문법을 확장으로 제공합니다. 신뢰할 수 없는 사용자가 표현식을 입력한다면 해당 기능을 허용하지 말고, 지원 문법을 제한한 뒤 실행 시간과 결과 크기도 통제하세요.

함께 보면 좋은 글

자주 묻는 질문

JSONPath 필터가 원본 JSON을 수정하나요?

표준 JSONPath는 노드를 선택하는 질의 언어입니다. 선택 결과를 이용해 수정하려면 사용하는 라이브러리의 별도 업데이트 기능이 필요합니다.

점 표기와 대괄호 표기 중 무엇을 써야 하나요?

단순한 이름은 둘 다 지원될 수 있지만 특수문자나 공백이 있는 키와 이식성을 고려하면 따옴표를 쓴 이름 선택자가 명확합니다.

필터에서 정규식을 바로 사용할 수 있나요?

구현체 확장에 의존하는 정규식 문법이 많습니다. RFC 9535의 표준 함수 지원과 라이브러리 문서를 확인한 뒤 사용하세요.

결과가 값 배열인지 경로 배열인지 어떻게 아나요?

반환 형식은 API에 따라 값, 노드, 정규화된 경로 목록 등으로 다를 수 있습니다. 라이브러리 옵션과 테스트 결과를 기준으로 후속 코드를 작성하세요.

근거와 출처

도구에서 직접 확인하기

설명한 기준을 실제 값에 적용하려면 JSONPath 테스터에서 작은 샘플부터 확인하세요. 원본과 결과를 나란히 비교한 뒤 실제 사용 환경에 적용하는 순서가 가장 안전합니다.

이 글은 알파카랩스 Utils개발 도구 도구와 함께 보는 정보성 가이드입니다. 규격과 외부 서비스 정책은 바뀔 수 있으므로 중요한 결정 전에는 연결된 공식 출처의 최신 내용을 다시 확인하세요.

무료 도구 둘러보기