-
Notifications
You must be signed in to change notification settings - Fork 0
JSONPath Search ko
edgar edited this page Feb 23, 2026
·
1 revision
jvim은 값 필터링이 가능한 JSONPath 기반 구조적 검색을 지원하여 JSON 데이터 내 특정 키, 값, 패턴을 찾을 수 있습니다.
다음으로 시작하는 검색 패턴은 자동으로 JSONPath로 인식됩니다:
-
$.— 루트 객체 멤버 접근 (예:$.name) -
$[— 루트 배열 인덱스 접근 (예:$[0])
$로 시작하지 않지만 JSONPath로 처리해야 하는 패턴은 \j 접미사를 추가합니다.
| 패턴 | 설명 |
|---|---|
$.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$ |
- JSONPath 표현식이 JSON 문서의 모든 매칭 경로를 찾음
- 각 매칭에서 리프 값 추출
- 필터 연산자가 값을 피연산자와 비교
- 필터를 통과한 매칭만 하이라이팅
필터 값은 자동으로 타입이 감지됩니다:
-
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 |
대소문자 구분 검색 강제 (정규식 텍스트 검색용) |
일반 텍스트 검색(비 JSONPath)에서 jvim은 기본적으로 smartcase를 사용합니다:
- 패턴에 소문자만 포함 → 대소문자 무시 검색
- 패턴에 대문자가 하나라도 포함 → 대소문자 구분 검색
\c (무시 강제) 또는 \C (구분 강제)로 재정의할 수 있습니다.
| 키 | 방향 |
|---|---|
/ |
정방향 검색 (커서 이후 다음 매치) |
? |
역방향 검색 (커서 이전 매치) |
n |
같은 방향으로 검색 반복 |
N |
반대 방향으로 검색 반복 |
검색이 활성화되면:
- 모든 매치가 에디터에서 하이라이팅됨
- 현재 매치는 구별되는 스타일로 하이라이팅됨
- 매치 위치는 사전 계산되어 행별로 인덱싱되어 효율적으로 렌더링
JSONPath 검색 시 jvim은 JSON 키 문자열을 에디터의 (행, 열) 위치로 매핑하는 키 인덱스를 구축합니다. 이 인덱스는:
-
:문자가 뒤따르는 따옴표로 감싼 문자열을 스캔 - 문자열 내 이스케이프된 따옴표를 처리
- 전체 JSON을 재파싱하지 않고 빠른 위치 조회 가능
JSONL 모드에서 JSONPath 검색은 레코드별로 동작합니다:
- 내용이 블록(연속된 비어있지 않은 줄 = 하나의 레코드)으로 분할
- 각 블록이 별도의 JSON 문서로 파싱
- JSONPath 해석이 각 레코드에 독립적으로 실행
- 결과가 블록 시작 오프셋을 사용하여 에디터 라인 위치로 매핑
즉, $.name은 첫 번째 레코드뿐만 아니라 모든 JSONL 레코드에서 name 필드를 찾습니다.
- 검색 히스토리는
~/.jvim/history.json에 자동 저장 - 다음 실행 시 복원
- 검색 모드에서
Up/Down화살표 키로 탐색 - 최대 50개 항목 저장