Command Palette

Search for a command to run...

JSONPath 테스터: 루프를 작성하지 않고 모든 JSON을 쿼리합니다

JSONPath 테스터: 루프를 작성하지 않고 모든 JSON을 쿼리합니다

T
Toolz Team
|Aug 23, 2026|14 최소 읽기

데이터 도구 모음의 일부

처음으로 중요한 JSONPath 표현식을 작성했을 때 작동하기 전에 세 번 잘못되었고,구성 중인 API 게이트웨이가 원하는 필드 대신 빈 정책을 반환했기 때문에 잘못된 것만 알았습니다. 피드백 루프가 없었습니다. 표현식을 편집하고 재배치한 후 기다렸습니다. JSONPath 테스터를 다른 탭에서 열어두기 시작하면 동일한 작업이 오후가 아닌 2 분이 걸렸습니다. 이 가이드는 내가 사용하는 방법에 관한 것입니다 JSONPath 테스터 Toolz.dev에서는 구문이 실제로 수행하는 작업과 표현식을 만드는 작은 트랩이 일치해야 한다고 확신할 때 아무것도 반환하지 않습니다.

TL;DR: JSONPath 는 XML 에 대한 XPath 와 같은 JSON 에 대한 쿼리 언어입니다. JSONPath 테스터는 다음과 같은 식을 평가합니다 $.store.book[*].author 문서에 대해 모든 일치하는 값과 해당 경로를 반환합니다. The JSONPath 테스터 와일드카드, 재귀 하강, 슬라이스, 유니온 및 필터 표현식을 지원하여 브라우저에서 이 작업을 완전히 수행하므로 코드를 붙여넣기 전에 실제 데이터에 대한 쿼리를 빌드하고 디버그할 수 있습니다.

JSONPath 란 무엇입니까?

JSONPath 는 JSON 문서의 일부를 선택하기 위한 컴팩트한 구문입니다. 데이터를 통해 경로를 설명하는 짧은 경로를 작성하고 이를 평가하면 해당 경로의 값이 반환됩니다. 아이디어는 다음에서 비롯됩니다 Stefan Goessner's 2007년 제안XML을 쿼리한 사람은 누구나 편안함을 느낄 수 있도록 의도적으로 XPath를 반영했습니다. 수년 동안 공식적인 사양은 없었고 해당 기사와 대부분 동의한 구현 제품군만 있었으며 2024년 초에 IETF가 출판되었습니다 RFC 9535 문법을 고정하려면.

JSONPath 를 예상보다 자주 만나게 됩니다. 쿠버네티스에서의 Postman 과 Karate 같은 API 테스트 툴의 셀렉터 언어입니다 kubectl 출력 포맷팅,AWS CloudWatch 및 Step Functions,로그 프로세서,그리고 사용자가 코드를 작성하지 않고 웹훅 페이로드에서 하나의 필드를 꺼내야 하는 수십 개의 로우 코드 플랫폼에서 학습하면 그 모든 것에 걸쳐 한 번 다시 지불됩니다.

멘탈 모델은 간단합니다. JSON 문서는 트리입니다. 객체는 가지에 이름을 붙였고 배열은 가지에 번호를 매겼으며 잎은 스칼라 값입니다. JSONPath 표현식은 해당 트리를 걷기 위한 방향 집합이며 결과는 착륙하는 모든 잎 또는 하위 트리에서 강력한 단일 표현식이 한 번에 여러 위치에 착륙할 수 있다는 것입니다.

JSONPath 테스터는 실제로 무엇을합니까?

테스터는 JSON 과 표현식이라는 두 개의 입력을 가져와서 표현식이 선택한 모든 노드를 보여줍니다. 뻔한 것처럼 들리지만 값은 피드백에 있습니다. 표현식이 아무것도 반환하지 않거나 예상보다 많은 것을 반환하면 테스터는 추측 게임을 2 초 검사로 바꿉니다. 정확히 어떤 노드가 일치하는지 확인하고 한 번에 한 문자를 조정할 수 있기 때문입니다.

Toolz.dev 에서는 흐름이 짧습니다. JSON 문서를 붙여넣거나,대부분의 JSONPath 튜토리얼에서 사용하는 샘플 서점을 불러오고,표현식을 입력하고,평가합니다. 이 도구는 일치하는 각 값을 실행 카운트로 나열하고,세 가지 보기 간에 출력을 전환할 수 있습니다. 값은 JSON 배열로 결과만 제공합니다. 경로는 모든 일치 항목의 정규화된 위치를 제공하며,이는 실제로 필요한 표현식을 검색하는 가장 빠른 방법입니다. 항목은 두 가지를 함께 제공하므로 경로와 값을 나란히 볼 수 있습니다.

머릿속에서 추론하기보다는 실제 데이터에 대해 테스트해야 하는 이유는 야생의 JSON 이 예제보다 더 지저분하기 때문입니다. 필드는 때로는 객체이고 때로는 배열입니다. 예상했던 키가 레코드의 절반에 누락되었습니다. 숫자가 문자열로 도착했습니다. 실제 페이로드에 대해 표현식을 실행하면 배포 시간이 아닌 즉시 놀라움이 발생합니다.

배열에서 항목을 어떻게 선택합니까?

배열은 대부분의 JSONPath 작업이 발생하는 곳이며 이를 해결하는 방법에는 네 가지가 있습니다.

단일 인덱스는 하나의 요소를 선택합니다. $.store.book[0] 첫 번째 책을 반환하고 JSONPath 는 대부분의 언어와 마찬가지로 0 부터 계산합니다. 음수 인덱스는 끝부터 계산하므로 $.store.book[-1] 얼마나 많은지 알 필요 없이 마지막 책을 반환합니다. 해당 부정적인 양식은 로그의 가장 최근 항목이나 피드의 최신 항목을 원할 때 진정으로 유용합니다.

와일드카드는 모든 요소를 선택합니다. $.store.book[*] 네 권의 책을 모두 반환합니다 $.store.book[*].author 각각의 작성자를 반환하여 작성자의 깔끔한 배열을 제공합니다. 와일드카드는 객체에서도 작동합니다. where $.store.* 키에 관계없이 저장소 개체의 모든 값을 반환합니다.

유니온은 특정 집합을 선택합니다. $.store.book[0,2] 첫 번째와 세 번째 책을 반환하고 동일한 쉼표 구문이 이름과 함께 작동하므로 $['store']['bicycle'] 그리고 대괄호로 인용된 키를 사용하면 점 형식이 할 수 없는 공백이나 구두점이 포함된 키를 처리할 수 있습니다.

슬라이스는 Python's 를 빌려 범위를 선택합니다 start:end:step 양식. $.store.book[:2] 처음 두 개를 취합니다 $.store.book[1:3] 최종 인덱스 배타적, 중간 범위를 취합니다 $.store.book[::2] 모든 두 번째 요소를 취합니다 $.store.book[::-1] 배열을 반대로 합니다. 슬라이스는 구문에서 가장 잘 알려지지 않은 부분이며 일단 입력하면 가장 많이 저장되는 부분입니다.

이중점은 무엇을 하는 걸까요?

이중점은 재귀하강법이며, JSONPath가 경로가 아닌 검색처럼 느껴지는 기능입니다. $..author 모든 것을 찾습니다 author 문서의 어느 곳에서나 키, 아무리 깊이 중첩되어 있더라도, 그리고 $..* 모든 레벨의 모든 값을 반환합니다. 문서의 정확한 모양을 알지 못하거나 동일한 필드가 여러 깊이에 나타날 때 재귀 하강은 하나의 표현식에서 모든 값을 찾습니다.

샘플 서점을 고려하십시오. $..price 4개의 책 가격과 자전거 가격이라는 5가지 값을 반환합니다. 왜냐하면 모든 개체에 내려가서 모든 것을 수집하기 때문입니다 price 찾는다. 평원 $.store.book[*].price 는 고정된 경로를 걷기 때문에 네 권의 책 가격만을 반환할 것입니다. 그 두 식의 차이는 알려진 위치에서 가격을 요구하는 것과 어디에서나 가격을 요구하는 것의 차이입니다.

재귀하강법은 위험할 만큼 강력합니다. 여러분이 의도한 것보다 더 많이 일치할 수 있다는 의미에서 말이죠. 바로 그 때문에 여기서 테스터가 중요합니다. 실행 $..name 익숙하지 않은 페이로드에 대해 키를 공유했는지 전혀 몰랐던 사용자 이름, 제품 이름 및 파일 이름과 일치한다는 것을 알 수 있습니다. 출력의 경로를 보면 표현식에 의존하기 전에 표현식을 좁힐지 여부를 알 수 있습니다.

필터 표현식은 어떻게 작동하나요?

필터는 조건이 참인 요소만 유지하고 기록됩니다 [?(...)] 와 함께 @ 현재 요소를 나타냅니다. $.store.book[?(@.price < 10)] 열보다 저렴 책을 반환합니다. 필터 내부 당신은 연산자와 리터럴에 필드를 비교할 수 있습니다 ==, !=, <, <=, >, 그리고 >=, 단순히 필드가 있는지 테스트하고 조건을 결합합니다 && 그리고 ||.

몇 가지 구체적인 예를 통해 모양이 명확해집니다:

  • $.store.book[?(@.category == "fiction")] 소설 제목을 선택합니다.
  • $.store.book[?(@.price < 10 && @.category == "fiction")] 저렴한 소설로 좁아집니다.
  • $.store.book[?(@.isbn)] 비교가 아닌 존재를 사용하여 ISBN이 있는 책만 선택합니다.
  • $.vals[?(@ > 2)] 숫자의 일반 배열을 필터링합니다 @ 그 자체로는 요소 자체를 의미합니다.

가장 일반적인 단일 필터 버그는 유형 불일치입니다. JSON 에서는 "12" 그리고 12 는 다른 값이므로 숫자 필드를 인용된 숫자와 비교하거나 문자열 필드를 맨 숫자와 비교하는 필터는 아무 것도 자동으로 일치하지 않습니다. 필터가 당신을 놀라게 할 때 가장 먼저 확인해야 할 것은 필드와 리터럴이 동일한 유형인지 여부입니다. 실제 값을 볼 수 있는 실제 데이터에 대해 표현식을 테스트하는 것은 배포 실패 후가 아닌 몇 초 만에 이를 포착하는 방법입니다.

JSONPath 대 JSON 포인터 대 JSON 차이

이 세 가지 도구는 모두 JSON 구조에 닿지만 서로 다른 질문에 답하고 잘못된 것을 고르는 것은 시간을 낭비합니다. 비교 방법은 다음과 같습니다:

접근 답변 일치 위한 최고의
JSONPath 어떤 노드가 이 쿼리를 만족합니까? 0, 1 또는 다수 필드 추출, 배열 필터링, 알 수 없는 모양 탐색
JSON 포인터 (RFC 6901) 이 정확한 위치에 무엇이 있습니까? 항상 정확히 하나 JSON 스키마에서와 같이 단일 고정 필드를 참조합니다 $ref
JSON 차이 두 문서 사이에 무엇이 바뀌었나요? 변경사항 집합 동일한 데이터의 두 버전을 비교합니다

JSON 포인터, 에 정의됨 RFC 6901는, 같이 슬래시 분리 경로로 하나의 정확한 장소를 해결합니다 /store/book/0/title그리고 와일드카드나 필터를 절대 사용하지 않습니다. 단일 필드의 이름을 명확하게 지정해야 할 때 Reach for it. 단일 표현식이 필드 집합을 선택해야 할 때 Reach for JSONPath. 그리고 실제 질문이 쿼리가 선택하는 것이 아니라 두 페이로드 간에 다른 점인 경우 a JSON 차이점 는 올바른 도구입니다. 실제로 필요한 세 가지 중 어느 것이 전투의 절반인지 아는 것입니다.

내 표현이 결과를 반환하지 않는 이유는 무엇입니까?

빈 결과는 거의 항상 소수의 원인 중 하나에서 나오며 테스터를 사용하면 신속하게 배제할 수 있습니다.

첫 번째는 구조적 불일치입니다. 당신이 쓴 $.data.items.name 언제 items 배열이므로 필요했습니다 $.data.items[*].name 와일드카드로. 점 형태는 객체 안으로 걸어들어가고, 배열은 a를 가진 객체가 아닙니다 name key,그래서 경로는 막다른 골목입니다. 출력 보기를 경로로 전환하고 표현식을 한 번에 한 세그먼트씩 밟으면 정확히 어디에서 일치가 중지되는지 보여줍니다.

두 번째는 철자법이나 케이스 오류입니다. JSON 키는 대소문자를 구분하므로 $.userId a와 일치하지 않습니다 userID 필드,그리고 키 이름의 후행 공간이나 오타는 같은 침묵 아무것도 생산하지 않습니다. 테스터가 표현식 바로 옆에 문서를 보여주기 때문에,이들은 발견하기 빠릅니다.

세 번째는 위에서 다룬 것처럼 필터 유형 불일치로,숫자 비교가 문자열 값 또는 그 반대에 대해 실행됩니다. 네 번째는 키가 일부에만 존재할 때 모든 요소에 키가 존재한다고 가정합니다. 재귀 하강 및 존재 필터는 일반적인 구제책입니다. 모든 경우에 수정 사항은 표현식이 터치하는 노드를 관찰하는 것에서 비롯되며,이는 정확히 테스터의 용도입니다.

Laravel API, React 프런트 엔드 및 가끔 셸 스크립트 사이를 이동하면서 스택을 내가 하는 방식으로 빌드하면 JSONPath가 세 가지 모두에 표시되며 데이터를 업로드하지 않는 브라우저 기반 테스터가 가장 가까운 도구와 같은 유틸리티가 더 넓은 키트에 어떻게 들어맞는지에 대해 썼습니다 웹 개발자 툴킷그리고 이런 종류의 작업을 클라이언트 측에서 유지하는 경우는 다음과 같습니다 온라인 도구의 데이터 개인 정보 보호 가이드.

이것이 나머지 JSON 워크플로우와 어떻게 맞습니까?

JSONPath 테스터는 거의 열려 있는 유일한 도구가 아닙니다. 쿼리 중인 JSON이 축소되거나 일관되지 않은 들여쓰기로 도착했을 때 해당 도구를 실행합니다 JSON 포맷터 먼저 표현식을 작성하는 동안 구조를 읽을 수 있도록 합니다. formatter 와 tester 는 함께 읽을 수 없는 API 응답에서 작업 쿼리로 이동하는 방법입니다.

내가 신경쓰는 필드를 알게 되면,다음 단계는 종종 모양을 바꾸는 것이다. 만약 내가 선택한 값을 스프레드시트나 환경 파일에 공급해야 한다면,the JSON 플래트너 중첩된 구조를 점 표기법 키로 바꾸고,그 경로 구문은 JSONPath 에 충분히 가까워서 둘이 서로를 보강합니다. If I am building a type for the data in TypeScript,the JSON에서 타이프스크립트 변환기는 인터페이스를 생성하며, 모양을 읽기만 하는 것이 아니라 모양을 검증해야 하는 경우 JSON 스키마 생성기 제약 조건을 추가할 수 있는 스키마를 생성합니다. JSONPath 는 탐색 단계입니다; 이러한 도구는 내가 찾은 것을 가지고 하는 것입니다.

개인 정보 보호 포인트는 반복할 가치가 있습니다. JSONPath 작업은 민감한 데이터에 대해 자주 발생하기 때문입니다. API 응답은 토큰,사용자 기록 및 내부 ID 를 전달하고 서버 측 도구에 붙여 넣는 것은 다른 사람을 신뢰하는 것을 의미합니다&#39;s 로그. Toolz.dev 테스터는 브라우저에서 완전히 구문 분석하고 평가하므로 그 중 어느 것도 머신을 떠나지 않으며 도구는 네트워크 연결이 끊긴 상태로 계속 작동합니다. 즉,스테이징 페이로드에서 사용할 수있는 도구와 실제에서 사용할 수있는 도구의 차이점입니다.

자주 묻는 질문

JSONPath는 어떤 용도로 사용되나요?

JSONPath 는 단일 표현식으로 JSON 문서의 일부를 선택하고 추출하는 데 사용됩니다. API 테스트 도구,쿠버네티스의 출력 포맷,AWS Step Functions 와 같은 클라우드 서비스 및 많은 로우 코드 플랫폼의 쿼리 언어이며,누군가가 절차 코드를 작성하지 않고 필드를 가져오거나 JSON 페이로드에서 배열을 필터링해야 하는 모든 곳에 있습니다.

JSONPath 에서 배열의 모든 요소를 어떻게 선택합니까?

와일드카드를 사용하세요 $.items[*] 항목 배열의 모든 요소를 반환합니다 $.items[*].id 각각의 id 를 반환합니다. index 로 한 요소를 선택할 수도 있습니다 $.items[0]음수 인덱스를 갖는 마지막 요소입니다 $.items[-1], 같은 결합이 있는 집합입니다 $.items[0,2]또는 슬라이스가 있는 범위입니다 $.items[1:3].

JSONPath 에서 이중점은 무엇을 의미합니까?

이중점은 재귀 하강으로, 어떤 깊이에서도 검색됩니다. $..author 아무리 깊이 중첩되어 있어도 문서 어디에서나 모든 작성자 키를 찾습니다 $..* 모든 레벨의 모든 값을 반환합니다. 정확한 구조를 미리 모르는 문서에서 필드를 꺼내는 가장 빠른 방법입니다.

JSONPath 에서 필터 표현식은 어떻게 작동하나요?

필터 [?(...)] 조건이 참인 요소만 유지합니다 @ 현재 요소를 참조합니다. 예를 들어 $.book[?(@.price < 10)] 10권보다 저렴한 책을 반품하며 조건을 결합할 수 있습니다 && 그리고 ||와 같은 [?(@.price < 10 && @.category == "fiction")]. 당신은 또한 field&#39;s 존재를 가진 시험할 수 있습니다 [?(@.isbn)].

왜 내 JSONPath 표현식은 아무것도 반환하지 않습니까?

가장 흔한 두 가지 원인은 구조적 불일치와 유형 불일치입니다. 각 키가 존재하고 정확한 케이싱으로 철자가 지정되었는지,데이터가 객체가 아닌 배열인 와일드카드를 사용했는지 확인하십시오. 필터에서 &quot;12&quot; 및 12 는 다른 값이므로 문자열 필드를 인용된 값과 비교하고 숫자 필드를 맨 숫자와 비교하십시오.

JSONPath 와 JSON 포인터의 차이점은 무엇입니까?

JSON 포인터는 /store/book/0/title 과 같은 하나의 정확한 위치를 다루며 항상 단일 값을 반환합니다. JSONPath 는 단일 표현식이 와일드카드,재귀 하강 및 필터를 통해 한 번에 많은 노드와 일치할 수 있는 쿼리 언어입니다. 하나의 고정 필드를 참조하려면 포인터를 사용하고,필드 집합을 선택하거나 컬렉션을 필터링하려면 JSONPath 를 사용합니다.

값뿐만 아니라 각 일치의 경로를 볼 수 있습니까?

예. 출력 모드를 경로로 전환하여 모든 일치 항목의 정규화된 위치를 얻거나,항목과 값을 함께 얻을 수 있는 항목으로 전환합니다. 실제 경로를 보는 것은 의도한 노드를 정확히 선택할 때까지 표현식을 구체화하는 가장 빠른 방법이며,이는 특히 재귀 하강에 도움이 됩니다.

테스터를 사용할 때 JSON이 업로드됩니까?

아니요. 문서가 구문 분석되고 표현식이 JavaScript 로 브라우저에서 평가되므로 아무 것도 전송,로그 또는 저장되지 않습니다. 쿼리를 실행하는 동안 네트워크 탭을 보거나 테스터가 페이지가 로드되면 오프라인으로 계속 작동하기 때문에 인터넷 연결을 끊어서 확인할 수 있습니다.


무료로 자신의 데이터에 그것을 시도 JSONPath 테스터. 그것은 아무것도 업로드하지 않고 브라우저에서 와일드 카드, 재귀 하강, 슬라이스, 조합 및 필터 표현을 완전히 평가합니다.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!