Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
JSONPath — http://goessner.net/articles/JsonPath/ 에서 가져온 JSONPath의 포크 | Kitploit
도구/GitHubGitHub/jsonpath-plus/jsonpath
General Purpose UtilitiesStatic AnalysisCode AnalysisScripting & AutomationUtilities & Frameworks
GitHubjsonpath-plus/jsonpath

JSONPath

http://goessner.net/articles/JsonPath/ 에서 가져온 JSONPath의 포크

저장소 보기
1.2k2001일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

npm

testing badge coverage badge

Known Vulnerabilities

Licenses badge

Node.js CI status

(개발 종속성 라이선스는 여기를 참조하세요)

JSONPath Plus

JSON 문서(및 JavaScript 객체)에서 데이터를 분석, 변환, 선택적으로 추출합니다.

jsonpath-plus는 원래 사양을 확장하여 일부 추가 연산자를 제공하고, 원래 사양에서 명시하지 않은 일부 동작을 명확히 합니다.

브라우저 데모 또는 Runkit (Node)를 사용해 보세요.

참고: 이 프로젝트는 현재 적극적으로 유지관리되고 있지 않습니다. 잘 문서화된 PR이나 간단한 업데이트는 수락할 수 있지만, 저희가 직접 수정하거나 새로운 기능을 추가할 계획은 없습니다.

기능

  • 원래 jsonpath 사양을 준수
  • 원래 사양에 없는 편리한 추가 및 확장:
    • 일치 항목의 부모를 가져오는 ^
    • 일치 항목의 속성 이름을 (배열로) 가져오는 ~
    • 다음을 얻기 위한 타입 선택자:
      • 기본 JSON 타입: @null(), @boolean(), @number(), @string(), @array(), @object()
      • @integer()
      • 복합 타입 @scalar() (undefined 및 JavaScript 객체를 쿼리할 때 비유한 숫자도 허용하며, 모든 기본 비객체/비함수 타입도 포함)
      • 사용자 정의 otherTypeCallback과 함께 사용할 수 있는 @other()

벤치마킹

jsonpath-plus는 json-querying-performance-testing에 따르면 다른 JSON 쿼리 라이브러리와 비교하여 크고 작은 데이터셋 모두에서 지속적으로 우수한 성능을 보입니다. 프로젝트를 직접 실행하고 더 많은 성능 테스트 케이스를 추가하여 이러한 결과를 확인할 수 있습니다.

설치```shell

npm install jsonpath-plus

root@kitploit:~
## 설정

### Node.js```js
const {JSONPath} = require('jsonpath-plus');

const result = JSONPath({path: '...', json});

브라우저

브라우저에서 사용하려면 dist/index-browser-umd.cjs를 직접 포함할 수 있으며, Browserify 마법은 필요하지 않습니다:```html

root@kitploit:~
### ESM (최신 브라우저)

최신 브라우저의 경우 ES6 Module imports를 사용할 수도 있습니다:```html
<script type="module">

import {
    JSONPath
} from './node_modules/jsonpath-plus/dist/index-browser-esm.js';

const result = JSONPath({path: '...', json: {}});

</script>

ESM (번들러)

또는 JavaScript를 번들링하는 경우(예: Rollup) 그냥 사용하세요, 참고로 mainFields에는 브라우저 빌드의 경우 browser가 포함되어야 하며(Node의 기본값은 module을 확인하므로 괜찮습니다):```js import {JSONPath} from 'jsonpath-plus';

const result = JSONPath({path: '...', json});

root@kitploit:~
## 사용법

사용 가능한 전체 시그니처는 다음과 같습니다:```
const result = JSONPath([options,] path, json, callback, otherTypeCallback);

인자 path, json, callback, otherTypeCallback은 (다른 사용 가능한 속성들과 함께) 대안적으로 표현될 수 있습니다 (options에서).

참고로 result는 발견된 모든 항목을 포함하며 (선택적으로 배열로 감싸짐), 반면 callback은 각 항목이 발견될 때마다 어떤 작업을 수행하려는 경우 사용할 수 있고, 콜백 함수는 결과에서 발견될 독립 항목 수에 따라 0회에서 N회까지 실행됩니다. JSONPath의 사용 가능한 인자에 대한 자세한 내용은 아래 문서를 참조하십시오.

또한 API 문서를 참조하십시오.

속성

options 객체 또는 evaluate 메서드(첫 번째 인자로)에 제공할 수 있는 속성은 다음과 같습니다:

  • path (필수) - (정규화된 또는 정규화되지 않은) 문자열 또는 배열인 JSONPath 표현식
  • json (필수) - 평가할 JSON 객체입니다 (null, boolean, number, string, object, 또는 array 유형).
  • autostart (기본값: true) - 이 값이 false로 제공되면, evaluate 메서드를 수동으로 호출할 수 있습니다.
  • flatten (기본값: false) - 반환된 결과 배열을 단일 차원 배열로 평탄화할지 여부입니다.
  • resultType (기본값: "value") - 대소문자를 구분하지 않는 형태의 "value", "path", "pointer", "parent", 또는 "parentProperty" 중 하나를 사용하여 각각 발견된 항목의 값으로, 절대 경로로, 절대 경로에 대한 JSON Pointer로, 부모 객체로, 또는 부모의 속성 이름으로 결과를 반환할지를 결정합니다. "all"로 설정하면 이 모든 유형이 유형을 키 이름으로 하는 객체에 반환됩니다.
  • sandbox (기본값: {}) - 코드 평가(예: 필터 표현식)에서 사용할 수 있는 변수의 키-값 맵입니다. (참고로 현재 경로와 값도 해당 표현식에서 사용할 수 있으며, 자세한 내용은 Syntax 섹션을 참조하십시오.)
  • wrap (기본값: true) - 결과를 배열로 감쌀지 여부입니다. wrap이 false로 설정되고 결과가 없으면, undefined가 반환됩니다 (wrap이 true로 설정된 경우의 빈 배열과는 대조적). wrap이 false로 설정되고 단일 비배열 결과가 발견되면 해당 결과만(배열 안에 담기지 않고) 반환됩니다. 그러나 여러 결과가 발견되면 여전히 배열이 반환됩니다. 모호성을 피하기 위해 (결과가 실패인지 빈 배열인지를 구분해야 하는 경우) 기본값을 로 전환하는 것이 좋습니다.

인스턴스 메서드

  • evaluate(path, json, callback, otherTypeCallback) 또는 evaluate({path: <path>, json: <json object>, callback: <callback function>, otherTypeCallback: <otherTypeCallback function>}) - 이 메서드는 autostart 속성이 false로 설정된 경우에만 필요합니다. 이 메서드는 동일한 구성으로 평가를 반복할 때 사용할 수 있습니다. 나열된 속성 외에도 후자의 메서드 패턴은 허용되는 다른 모든 인스턴스 속성을 받을 수 있습니다 (단, 여기서는 관련이 없는 autostart는 제외).

클래스 속성 및 메서드

  • JSONPath.clearCache() - 내부적으로 캐시된 파싱 경로와 컴파일된 스크립트를 지웁니다. 캐시 내용은 노출되지 않으므로, 캐시 무효화가 필요할 때 이 메서드를 호출하십시오.
  • JSONPath.toPathArray(pathAsString) - 정규화된 또는 정규화되지 않은 경로를 문자열로 받아 배열로 변환합니다: 예를 들어, ['$', 'aProperty', 'anotherProperty']처럼 변환합니다.
  • JSONPath.toPathString(pathAsArray) - 경로 배열을 받아 정규화된 경로 문자열로 변환합니다. 문자열은 $['aProperty']['anotherProperty][0]와 같은 형태가 됩니다. JSONPath 터미널 구성인 ~와 ^, 그리고 @string()과 같은 타입 연산자는 자동으로 제거됩니다.
  • JSONPath.toPointer(pathAsArray) - 경로 배열을 받아 JSON Pointer로 변환합니다. 문자열은 /aProperty/anotherProperty/0과 같은 형태가 됩니다. (~와 / 내부 문자는 JSON Pointer 명세에 따라 이스케이프됩니다). JSONPath 터미널 구성인 ~와 ^, 그리고 @string()과 같은 타입 연산자는 자동으로 제거됩니다.

예제를 통한 구문

다음 JSON은 http://goessner.net/articles/JsonPath/에서 가져온 것입니다:```json { "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } } }

root@kitploit:~
및 다음 XML 표현:```xml
<store>
    <book>
        <category>reference</category>
        <author>Nigel Rees</author>
        <title>Sayings of the Century</title>
        <price>8.95</price>
    </book>
    <book>
        <category>fiction</category>
        <author>Evelyn Waugh</author>
        <title>Sword of Honour</title>
        <price>12.99</price>
    </book>
    <book>
        <category>fiction</category>
        <author>Herman Melville</author>
        <title>Moby Dick</title>
        <isbn>0-553-21311-3</isbn>
        <price>8.99</price>
    </book>
    <book>
        <category>fiction</category>
        <author>J. R. R. Tolkien</author>
        <title>The Lord of the Rings</title>
        <isbn>0-395-19395-8</isbn>
        <price>22.99</price>
    </book>
    <bicycle>
        <color>red</color>
        <price>19.95</price>
    </bicycle>
</store>

유의하세요: 아래 XPath 예제는 요소 검색과 해당 텍스트 콘텐츠 검색을 구분하지 않습니다(비교에 유용하거나 모호함을 방지하는 경우는 제외). 참고: XPath 예제(2.0 포함)를 테스트하려면, 이 데모가 유용할 수 있습니다(xml 또는 xml-strict로 설정).| XPath | JSONPath | Result | Notes | |-------------------------------------------------------------------------------------|---------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | /store/book/author | $.store.book[*].author | 가게에 있는 모든 책의 저자 | 없이 로도 표현할 수 있습니다(원래 사양에는 없지만). 다만 일부 문자 리터럴( 및 )은 이스케이프가 필요합니다. | | | | 모든 저자 | | | | | 가게 안의 모든 것, 즉 책들(책 배열)과 빨간 자전거(자전거 객체). | | | | | 가게에 있는 모든 것의 가격. | | | | | 세 번째 책(책 객체) | | | | | 순서상 마지막 책. | 특수 문자가 포함된 속성에 접근하려면 필터에 를 사용하세요(이 특정 기능은 원래 사양에 없습니다). | | | | 처음 두 권의 책 | | | or in XPath 2.0 | | 모든 책의 카테고리와 저자 | | | | | ISBN 번호가 있는 모든 책 필터링 | 특수 문자가 포함된 속성에 접근하려면 필터에 를 사용하세요(이 특정 기능은 원래 사양에 없습니다). | | | | 10보다 저렴한 모든 책 필터링 | | | | | 속성이 price이고 8.95와 같지 않은 객체들의 모든 속성 값 가져오기 | 단독 를 사용하면 (반드시 배열 내부가 아니어도) 속성 값으로 객체를 필터링할 수 있습니다. 표현식 뒤에 를 추가하면 필터링된 속성을 보유한 객체에 접근할 수 있습니다. | | | | JSON 객체의 루트(즉, 객체 전체 자체) | 리터럴 (단독 또는 경로의 어느 위치에서든)를 얻으려면 백틱 이스케이프를 사용해야 합니다. | | | | XML 문서에서 루트 아래의 모든 요소(및 텍스트). 루트 아래의 JSON 구조의 모든 멤버. | | | | | XML 문서의 모든 요소. 루트를 포함한 JSON 구조의 모든 부모 구성 요소. | 이 동작은 원래 사양에 직접 명시되지 않았습니다. | | | | 가격이 19보다 큰 해당 항목들의 부모(즉, 자전거의 부모인 store 값과 개별 책의 부모인 책 배열) | 부모(캐럿)는 원래 사양에 없습니다. | | (in XPath 2.0) | | store 하위 객체의 속성 이름("book" 및 "bicycle"). 와일드카드 속성과 함께 유용합니다. | 속성 이름(틸드)은 원래 사양에 없습니다. | | (in XPath 2.0) | | 첫 번째 책을 가리키는 경로에 있는 책 외의 모든 책 | 는 원래 사양에 없습니다. | | | | 책의 부모 객체에 색상이 빨간색인 bicycle 자식이 있는 모든 책의 카테고리를 가져옵니다(즉, 모든 책). | 는 원래 사양에 없습니다. | | | | "book"의 자식 중 "category" 자식을 제외한 모든 자식을 가져옵니다. | 는 원래 사양에 없습니다. | | | | 속성(배열 내부에 접근 중이므로 숫자 인덱스임)이 0이 아닌 모든 책을 가져옵니다. | 는 원래 사양에 없습니다. | | | | 부모 속성이 book이 아닌 store의 손주들을 가져옵니다(즉, bicycle의 자식인 "color"와 "price"). | 는 원래 사양에 없습니다. | | | | 이 값들의 부모 속성(즉, 책 항목의 부모 객체를 보유한 배열 인덱스)이 0이 아닌 모든 책 인스턴스의 속성 값을 가져옵니다. | 는 원래 사양에 없습니다. | | | | 가격이 세 번째 책의 가격과 같은 모든 책 필터링 | 는 원래 사양에 없습니다. | | (in XPath 2.0) | | 책 배열 내의 숫자 값 가져오기 | , 기타 기본 유형(, ), 기타 저수준 파생 유형(, , ), JSONSchema에서 추가된 유형 , 복합 유형 (JavaScript 객체의 및 비유한 숫자뿐만 아니라 모든 기본 비객체/비함수 유형도 허용), 사용자 정의 콜백과 함께 사용되는 유형( 참조), 그리고 JSON이 아닌 JavaScript 객체를 쿼리할 때 JSONPath와 함께 사용할 수 있는 다음 비JSON 유형들(, , )은 원래 사양에 없습니다. | | (XPath 2.0) | | 정규식과 일치하는(대소문자 구분 없이 'TION'으로 끝나는) 모든 책 카테고리 | 는 원래 사양에 없습니다. | | (XPath 2.0) | | 정규식과 일치하는(대소문자 구분 없이 'TION'으로 끝나는) 속성을 가진 모든 책 | 는 원래 사양에 없습니다. 참고: 표현식 끝에 부모 선택자 를 사용하여 부모 객체로 돌아갑니다. 부모 선택자가 없으면 두 개의 키 값을 일치시킵니다. | | | (e.g., to match a property literally named ) | 뒤에 오는 전체 시퀀스를 이스케이프합니다(리터럴로 처리됨) | 는 원래 사양에 없습니다. 리터럴 백틱을 얻으려면 추가 백틱을 사용하여 이스케이프하세요. |선택적 "sandbox" 객체 옵션의 속성으로 제공되는 추가 변수들은 (괄호 기반) 평가에서도 사용할 수 있습니다.

XPath 사용자에게 혼동을 줄 수 있는 부분

  1. JSONPath에서 필터 표현식은 @가 자식에 대한 참조인 것 외에도 실제로 직접 자식도 선택하는 반면, XPath에서 필터 조건은 자식을 선택하지 않고 결과에서 해당 부모 노드 중 어떤 것이 얻어질지를 한정합니다.
  2. JSONPath에서 배열 인덱스는 JavaScript에서와 마찬가지로 0-based이며(0부터 시작), XPath에서는 1-based입니다.
  3. JSONPath에서 동등성 테스트는 JavaScript에서처럼 등호를 여러 개 사용하는 반면, XPath에서는 단일 등호를 사용합니다.

명령줄 인터페이스

기본적인 명령줄 인터페이스(CLI)가 제공됩니다. npx jsonpath-plus <json-file> <jsonpath-query>를 사용하여 접근할 수 있습니다.

아이디어

  1. 필터 외부에서 OR(XPath |와 같은) 및 그룹화 지원.
  2. 자식을 선택하지 않는 점에서 XPath 필터처럼 작동하는 구문을 만들기?
  3. parentNode에 상응하는 옵션 허용(루트까지 parent-and-parentProperty 객체의 전체 체인을 유지).

개발

Node에서 테스트 실행:```shell npm test

root@kitploit:~
브라우저 내 테스트의 경우:

- js/html 파일을 제공하십시오:```shell
npm run browser-test
  • http://localhost:8082/test/를 방문하세요.

보안

중요한 보안 고려 사항 및 취약점 신고 방법은 SECURITY.md를 참조하세요.

라이선스

MIT License.

도구 다운로드
  • 비JSON JavaScript 객체를 쿼리할 때 사용할 수 있는 비JSON 타입 (@undefined(), @function(), @nonFinite())
  • 필터 내에서 사용할 수 있는 @path/@parent/@property/@parentProperty/@root 축약 선택자
  • 이스케이프
    • 나머지 시퀀스를 이스케이프하는 `
    • 필터 내 속성 이름의 특수 문자를 이스케이프하는 @['...']/?@['...'] 구문
  • $.. 문서 (모든 부모 구성 요소 가져오기)
  • ESM 및 UMD 내보내기 형식
  • 쿼리된 값 외에도 다양한 메타 정보를 반환할 수 있습니다. 값에 대한 경로나 포인터, 부모 객체 및 부모 속성 이름을 포함합니다(수정 가능).
  • 경로, 배열, 포인터 간 변환 유틸리티
  • 원래 사양에서 허용된 평가를 방지하거나 평가된 값에 대한 샌드박스를 제공하는 옵션.
  • 결과가 얻어질 때 이를 처리하는 콜백 옵션.
  • false
  • eval (기본값: "safe") - 스크립트 평가 방식. safe: 브라우저에서는 eval이나 Function을 사용하지 않는 최소 스크립팅 엔진을 사용하며 CSP(Content Security Policy)를 충족합니다. NodeJS에서는 스크립팅이 안전하므로 아무 효과가 없으며 native와 동일합니다. native: 네이티브 스크립팅 기능을 사용합니다. 즉, 브라우저에서는 안전하지 않은 eval 또는 Function을, nodejs에서는 vm.Script를 사용합니다. false: JavaScript 평가 표현식을 비활성화하고 이러한 표현식이 시도되면 예외를 throw합니다. callback [ (code, context) => value]: code와 context를 인자로 호출되어 평가된 값을 반환하는 사용자 정의 구현입니다. class: 생성자 인자로 code를 사용하여 생성되는 클래스이며, 코드는 context로 runInNewContext를 호출하여 평가됩니다. ``
  • ignoreEvalErrors (기본값: false) - 스크립트 평가 중 발생하는 오류를 무시합니다.
  • parent (기본값: null) - 쿼리가 루트 노드를 반환하도록 만들 수 있는 경우, 이 옵션을 사용하면 해당 루트 노드의 부모가 결과 내에서 반환될 수 있습니다.
  • parentProperty (기본값: null) - 쿼리가 루트 노드를 반환하도록 만들 수 있는 경우, 이 옵션을 사용하면 해당 루트 노드의 parentProperty가 결과 내에서 반환될 수 있습니다. 이는 문자열 속성 이름이거나 숫자 배열 인덱스일 수 있습니다.
  • callback (기본값: (없음)) - 제공되면 콜백이 엔드포인트 값을 검색하는 즉시 호출됩니다. 전달되는 세 가지 인자는 페이로드의 값 (resultType에 따름), 페이로드의 유형 (일반 "value"인지 "property" 이름인지), 그리고 전체 페이로드 객체 (모든 resultType 포함)입니다.
  • otherTypeCallback (기본값: <오류를 throw하는 함수 @other()를 만나면>) - 현재 JSON Schema 지원이 없는 상황에서, 내장 타입 외의 타입을 판별하려면 쿼리 끝에 @other() 연산자를 추가하면 됩니다. 만약 그러한 경로가 발견되면 otherTypeCallback이 해당 항목의 값, 경로, 부모, 부모의 속성 이름과 함께 호출되며, 제공된 값이 "other" 타입에 속하는지 여부를 나타내는 불리언을 반환해야 합니다(또는 변환을 처리하고 false를 반환할 수도 있습니다).
  • $.
    store.book[*].author
    $
    @
    //author
    $..author
    /store/*
    $.store.*
    /store//price
    $.store..price
    //book[3]
    $..book[2]
    //book[last()]
    $..book[(@.length-1)]

    $..book[-1:]
    [(@['...'])]
    //book[position()<3]
    $..book[0,1]

    $..book[:2]
    //book/*[self::category\|self::author]
    //book/(category,author)
    $..book[0][category,author]
    //book[isbn]
    $..book[?(@.isbn)]
    [?@['...']]
    //book[price<10]
    $..book[?(@.price<10)]
    //*[name() = 'price' and . != 8.95]
    $..*[?(@property === 'price' && @ !== 8.95)]
    @
    ^
    /
    $
    $
    //*/*\|//*/*/text()
    $..*
    //*
    $..
    //*[price>19]/..
    $..[?(@.price>19)]^
    /store/*/name()
    $.store.*~
    /store/book[not(. is /store/book[1])]
    $.store.book[?(@path !== "$['store']['book'][0]")]
    @path
    //book[parent::*/bicycle/color = "red"]/category
    $..book[?(@parent.bicycle && @parent.bicycle.color === "red")].category
    @parent
    //book/*[name() != 'category']
    $..book.*[?(@property !== "category")]
    @property
    //book[position() != 1]
    $..book[?(@property !== 0)]
    @property
    /store/*/*[name(parent::*) != 'book']
    $.store.*[?(@parentProperty !== "book")]
    @parentProperty
    //book[count(preceding-sibling::*) != 0]/*/text()
    $..book.*[?(@parentProperty !== 0)]
    @parentProperty
    //book[price = /store/book[3]/price]
    $..book[?(@.price === @root.store.book[2].price)]
    @root
    //book/../*[. instance of element(*, xs:decimal)]
    $..book..*@number()
    @number()
    @boolean()
    @string()
    @null()
    @object()
    @array()
    @integer()
    @scalar()
    undefined
    @other()
    otherTypeCallback
    @undefined()
    @function()
    @nonFinite()
    //book/*[name() = 'category' and matches(., 'tion$')]
    $..book.*[?(@property === "category" && @.match(/TION$/i))]
    @property
    //book/*[matches(name(), 'bn$')]/parent::*
    $..book.*[?(@property.match(/bn$/i))]^
    @property
    ^
    isbn
    `
    `$
    $
    `