Skip to content

JSONPath Search ko

edgar edited this page Feb 23, 2026 · 1 revision

JSONPath 검색

jvim은 값 필터링이 가능한 JSONPath 기반 구조적 검색을 지원하여 JSON 데이터 내 특정 키, 값, 패턴을 찾을 수 있습니다.

자동 감지

다음으로 시작하는 검색 패턴은 자동으로 JSONPath로 인식됩니다:

  • $. — 루트 객체 멤버 접근 (예: $.name)
  • $[ — 루트 배열 인덱스 접근 (예: $[0])

$로 시작하지 않지만 JSONPath로 처리해야 하는 패턴은 \j 접미사를 추가합니다.

기본 JSONPath 문법

패턴 설명
$.key 직접 자식 키 접근
$.parent.child 중첩 키 접근
$[0] 인덱스로 배열 요소 접근
$[*] 모든 배열 요소 (와일드카드)
$..key 재귀 탐색 — 모든 깊이에서 key 찾기
$.users[0].name 조합 접근
$.users[*].email 모든 사용자 이메일

예시

/$.name              → 루트의 "name" 필드 찾기
/$..email            → 모든 깊이에서 "email" 필드 찾기
/$.users[0]          → "users" 배열의 첫 번째 요소
/$.users[*].name     → 모든 사용자의 "name" 필드
/$.config.db.host    → 깊이 중첩된 필드

값 필터링

비교 연산자와 값을 추가하여 검색 결과를 필터링할 수 있습니다:

연산자 설명 예시
= 같음 $.status="active"
!= 다름 $.status!=null
> 초과 $.age>18
< 미만 $.price<100
>= 이상 $.count>=5
<= 이하 $.count<=10
~ 정규식 매칭 $.email~@gmail\.com$

필터링 동작 방식

  1. JSONPath 표현식이 JSON 문서의 모든 매칭 경로를 찾음
  2. 각 매칭에서 리프 값 추출
  3. 필터 연산자가 값을 피연산자와 비교
  4. 필터를 통과한 매칭만 하이라이팅

값 타입 처리

필터 값은 자동으로 타입이 감지됩니다:

  • null, true, false → JSON 리터럴로 비교
  • 숫자 문자열 → 숫자로 비교 (>, <, >=, <= 연산)
  • 그 외 → 문자열로 비교

예시

/$.users[*].age>30           → 30세 초과 사용자
/$.items[*].status="active"  → 활성 상태인 아이템
/$..name~^J                  → J로 시작하는 모든 이름 (정규식)
/$.price<=1000               → 1000 이하 가격
/$.config.enabled=true       → 활성화된 설정
/$.data[*].count!=0          → 0이 아닌 카운트
/$..version>=2.0             → 2.0 이상 버전

검색 수정자

검색 동작을 변경하는 접미사:

접미사 설명
\j $로 시작하지 않는 패턴을 JSONPath 모드로 강제
\c 대소문자 무시 검색 강제 (정규식 텍스트 검색용)
\C 대소문자 구분 검색 강제 (정규식 텍스트 검색용)

Smartcase

일반 텍스트 검색(비 JSONPath)에서 jvim은 기본적으로 smartcase를 사용합니다:

  • 패턴에 소문자만 포함 → 대소문자 무시 검색
  • 패턴에 대문자가 하나라도 포함 → 대소문자 구분 검색

\c (무시 강제) 또는 \C (구분 강제)로 재정의할 수 있습니다.

검색 방향

방향
/ 정방향 검색 (커서 이후 다음 매치)
? 역방향 검색 (커서 이전 매치)
n 같은 방향으로 검색 반복
N 반대 방향으로 검색 반복

하이라이팅

검색이 활성화되면:

  • 모든 매치가 에디터에서 하이라이팅됨
  • 현재 매치는 구별되는 스타일로 하이라이팅됨
  • 매치 위치는 사전 계산되어 행별로 인덱싱되어 효율적으로 렌더링

내부 키 인덱스

JSONPath 검색 시 jvim은 JSON 키 문자열을 에디터의 (행, 열) 위치로 매핑하는 키 인덱스를 구축합니다. 이 인덱스는:

  • : 문자가 뒤따르는 따옴표로 감싼 문자열을 스캔
  • 문자열 내 이스케이프된 따옴표를 처리
  • 전체 JSON을 재파싱하지 않고 빠른 위치 조회 가능

JSONL 모드

JSONL 모드에서 JSONPath 검색은 레코드별로 동작합니다:

  1. 내용이 블록(연속된 비어있지 않은 줄 = 하나의 레코드)으로 분할
  2. 각 블록이 별도의 JSON 문서로 파싱
  3. JSONPath 해석이 각 레코드에 독립적으로 실행
  4. 결과가 블록 시작 오프셋을 사용하여 에디터 라인 위치로 매핑

즉, $.name은 첫 번째 레코드뿐만 아니라 모든 JSONL 레코드에서 name 필드를 찾습니다.

검색 히스토리

  • 검색 히스토리는 ~/.jvim/history.json에 자동 저장
  • 다음 실행 시 복원
  • 검색 모드에서 Up/Down 화살표 키로 탐색
  • 최대 50개 항목 저장

English |

Clone this wiki locally