Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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.2k2003516시간 16분 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
[![npm](https://img.shields.io/npm/v/jsonpath-plus.svg)](https://www.npmjs.com/package/jsonpath-plus)

[![testing badge](https://raw.githubusercontent.com/s3u/JSONPath/master/badges/tests-badge.svg?sanitize=true)](badges/tests-badge.svg)
[![coverage badge](https://raw.githubusercontent.com/s3u/JSONPath/master/badges/coverage-badge.svg?sanitize=true)](badges/coverage-badge.svg)

[![Known Vulnerabilities](https://snyk.io/test/github/s3u/JSONPath/badge.svg)](https://snyk.io/test/github/s3u/JSONPath)

<!--[![License](https://img.shields.io/npm/l/JSONPath.svg)](LICENSE-MIT.txt)-->
[![Licenses badge](https://raw.githubusercontent.com/s3u/JSONPath/master/badges/licenses-badge.svg?sanitize=true)](badges/licenses-badge.svg)

[![Node.js CI status](https://github.com/JSONPath-Plus/JSONPath/actions/workflows/node.js.yml/badge.svg)](https://github.com/JSONPath-Plus/JSONPath/actions/workflows/node.js.yml)

<small>(개발 의존성에 대한 [라이선스](https://raw.githubusercontent.com/s3u/JSONPath/master/badges/licenses-badge-dev.svg?sanitize=true)도 참조하세요.)</small>

# JSONPath Plus

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

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

[브라우저 데모](https://jsonpath-plus.github.io/JSONPath/demo/) 또는 [Runkit (Node)](https://npm.runkit.com/jsonpath-plus)를 사용해 보세요.

***참고: 이 프로젝트는 현재 활발히 유지보수되고 있지 않습니다. 문서화가 잘 된 PR이나 간단한 업데이트는 수용할 수 있지만, 직접 수정하거나 새로운 기능을 추가할 계획은 없습니다.***

## 기능

* 원래 jsonpath 명세와 **호환**됩니다
* 원래 명세에서 제공하지 않는 편리한 **추가 또는 확장** 기능:
    * 일치하는 항목의 **부모**를 가져오는 `^`
    * 일치하는 항목의 **속성 이름**을 (배열로) 가져오는 `~`
    * 다음을 얻기 위한 **타입 선택자**:
        * 기본 JSON 타입: `@null()`, `@boolean()`, `@number()`, `@string()`, `@array()`, `@object()`
        * `@integer()`
        * 복합 타입 `@scalar()` (JavaScript 객체를 쿼리할 때 `undefined`와 비유한 숫자도 허용하며, 모든 기본 비객체/비함수 타입도 포함)
        * 사용자 정의 `otherTypeCallback`과 함께 사용할 수 있는 `@other()`
        * 비JSON JavaScript 객체를 쿼리할 때 사용할 수 있는 비JSON 타입 (`@undefined()`, `@function()`, `@nonFinite()`)
    * 필터 내 **축약 선택자** `@path`/`@parent`/`@property`/`@parentProperty`/`@root`
    * **이스케이프**
        * 남은 시퀀스를 이스케이프하는 `` ` ``
        * 필터 내 속성 이름의 특수 문자를 이스케이프하는 `@['...']`/`?@['...']` 구문
    * `$..` (**모든 부모 구성 요소 가져오기**) 문서화
* **ESM** 및 **UMD** 내보내기 형식
* 쿼리된 값 외에도 값에 대한 경로나 포인터, 부모 객체 및 부모 속성 이름(수정을 허용하기 위해)을 포함한 **다양한 메타 정보를 반환**할 수 있습니다.
* 경로, 배열, 포인터 간 **변환 유틸리티**
* 원래 명세에서 허용된 **평가를 방지**하거나 평가된 값에 대한 **샌드박스**를 제공하는 옵션.
* 결과가 얻어질 때 **결과를 처리하는 콜백** 옵션.

## 벤치마킹

`jsonpath-plus`는 [json-querying-performance-testing](https://github.com/andykais/json-querying-performance-testing)에 따르면 다른 json 쿼리 라이브러리와 비교하여 크고 작은 데이터셋 모두에서 일관되게 성능이 우수합니다. [프로젝트를 직접 실행](https://github.com/andykais/json-querying-performance-testing#how-to-run)하고 더 많은 성능 사례를 추가하여 이러한 결과를 확인할 수 있습니다.

## 설치

```shell
npm install jsonpath-plus
```

## 설정

### Node.js

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

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

### 브라우저

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

```html
<script src="node_modules/jsonpath-plus/dist/index-browser-umd.cjs"></script>

<script>

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

</script>
```

### ESM (최신 브라우저)

최신 브라우저를 위한 ES6 모듈 임포트를 사용할 수도 있습니다:

```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`](https://github.com/rollup/plugins/tree/master/packages/node-resolve#mainfields)에
브라우저 빌드의 경우 `browser`가 포함되어야 한다는 점에 유의하세요(Node의 경우
`module`을 확인하는 기본값이면 충분합니다):

```js
import {JSONPath} from 'jsonpath-plus';

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

## 사용법

사용 가능한 전체 시그니처는 다음과 같습니다:

```
const result = JSONPath([options,] path, json, callback, otherTypeCallback);
```

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

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

[API 문서](https://jsonpath-plus.github.io/JSONPath/docs/ts/)도 참조하십시오.

### 속성

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

- ***path*** (**필수**) - (정규화되거나 정규화되지 않은) 문자열
  또는 배열로서의 JSONPath 표현식
- ***json*** (**필수**) - 평가할 JSON 객체 (null, boolean, number,
  string, object, array 타입 여부와 무관).
- ***autostart*** (**기본값: true**) - 이것이 `false`로 제공되면,
  `evaluate` 메서드를 수동으로 호출할 수 있습니다.
- ***flatten*** (**기본값: false**) - 반환된 결과 배열이
  1차원 배열로 평탄화될지 여부.
- ***resultType*** (**기본값: "value"**) - 대소문자를 구분하지 않는
  형태의 "value", "path", "pointer", "parent", "parentProperty"로,
  각각 발견된 항목의 값, 절대 경로, 절대 경로에 대한
  [JSON Pointer](https://tools.ietf.org/html/rfc6901), 부모 객체,
  또는 부모의 속성 이름으로 결과를 반환할지 결정합니다. "all"로
  설정하면, 이 모든 타입이 타입을 키 이름으로 하는 객체에
  반환됩니다.
- ***sandbox*** (**기본값: {}**) - 필터링 표현식과 같은 코드 평가에
  사용할 수 있는 변수의 키-값 맵. (현재 경로와 값도 해당
  표현식에서 사용할 수 있습니다; 자세한 내용은 구문 섹션을
  참조하십시오.)
- ***wrap*** (**기본값: true**) - 결과를 배열로 감쌀지 여부.
  `wrap`이 `false`로 설정되고 결과가 발견되지 않으면,
  `undefined`가 반환됩니다 (`wrap`이 true일 때의 빈 배열과는
  대조적). `wrap`이 `false`이고 단일 비배열 결과가 발견되면,
  그 결과가 유일한 반환 항목이 됩니다 (배열 내에 있지 않음).
  그러나 여러 결과가 발견되면 여전히 배열이 반환됩니다.
  모호성을 피하기 위해 (결과가 실패인 경우와 빈 배열인 경우를
  구분할 필요가 있는 경우), 기본값을 `false`로 전환하는 것이
  권장됩니다.
- ***eval*** (**기본값: "safe"**) - 스크립트 평가 메서드.
  `safe`: 브라우저에서는 `eval`이나 `Function`을 사용하지 않고
  Content Security Policy를 충족하는 최소한의 스크립팅 엔진을
  사용합니다. NodeJS에서는 효과가 없으며 스크립팅이 안전하므로
  네이티브와 동일합니다.
  `native`: 네이티브 스크립팅 기능을 사용합니다. 즉, 브라우저에서는
  안전하지 않은 `eval` 또는 `Function`, nodejs에서는 `vm.Script`를
  사용합니다. `false`: JavaScript 평가 표현식을 비활성화하고
  이러한 표현식이 시도될 때 예외를 발생시킵니다.
  `callback [ (code, context) => value]`: `code`와 `context`를
  인수로 호출되어 평가된 값을 반환하는 사용자 정의 구현.
  `class`: `code`를 생성자 인수로 생성되고 `context`와 함께
  `runInNewContext`를 호출하여 코드가 평가되는 클래스.
  ``
- ***ignoreEvalErrors*** (**기본값: false**) - 스크립트 평가 중
  발생한 오류를 무시합니다.
- ***parent*** (**기본값: null**) - 쿼리가 루트 노드를 반환하도록
  만들어진 경우, 이는 해당 루트 노드의 부모가 결과 내에서
  반환되도록 허용합니다.
- ***parentProperty*** (**기본값: null**) - 쿼리가 루트 노드를
  반환하도록 만들어진 경우, 이는 해당 루트 노드의 `parentProperty`가
  결과 내에서 반환되도록 허용합니다. 이는 문자열 속성 이름이나
  숫자 배열 인덱스일 수 있습니다.
- ***callback*** (**기본값: (없음)**) - 제공되면, 종단점 값의
  검색 시 즉시 콜백이 호출됩니다. 제공되는 세 인수는 페이로드의
  값 (`resultType`에 따름), 페이로드의 타입 (일반 "value"인지
  "property" 이름인지), 그리고 전체 페이로드 객체 (모든
  `resultType` 포함)입니다.
- ***otherTypeCallback*** (**기본값: \<@other()가 발생했을 때**
  **오류를 발생시키는 함수\>**) - 현재 JSON Schema 지원이 없는
  상황에서, 쿼리 끝에 `@other()` 연산자를 추가하여 내장 타입
  이외의 타입을 판별할 수 있습니다. 그러한 경로가 발생하면,
  `otherTypeCallback`이 항목의 값, 경로, 부모, 부모의 속성 이름과
  함께 호출되며, 제공된 값이 "other" 타입에 속하는지 여부를
  나타내는 boolean을 반환해야 합니다 (또는 변환을 처리하고
  false를 반환할 수도 있습니다).
- ***customTypes*** (**기본값: {}**) - 타입 이름에서 함수로의
  키-값 맵. 이를 통해 쿼리에서 사용할 수 있는 사용자 정의 타입
  연산자를 만들 수 있습니다 (예: `@myType()`). 함수는 항목의 값,
  경로, 부모, 부모의 속성 이름과 함께 호출됩니다. 제공된 값이
  사용자 정의 타입과 일치하는지 여부를 나타내는 boolean을
  반환해야 합니다. 다음과 같이 설정할 수도 있습니다:
  1. 다음 타입들을 미리 정의하는 `jsonpath-plus/src/structuredCloningTypes.js` import의 값:
  @NaN(), @BigIntObject(), @Date(), @Set(), @Map(), @RegExp(),
  @Blob(optionalMimeType), @File(optionalMimeType), @Boolean(), @Number(),
  @String(), @Infinity(), @negativeInfinity(), @negativeZero(),
  @DOMException(), @Error(), @EvalError(), @RangeError(), @ReferenceError(),
  @SyntaxError(), @TypeError(), @URIError(), @AggregateError(),
  @QuotaExceededError(), @WebTransportError(), @FileList, @ArrayBuffer(),
  @DataView(), @ImageData(), @ImageBitmap(), @Int8Array(), @Uint8Array(),
  @Uint8ClampedArray(), @Int16Array(), @Uint16Array(), @Int32Array(),
  @Uint32Array(), @Float32Array(), @Float64Array(), @BigInt64Array(),
  @BigUint64Array(), @Float16Array, @DOMMatrix(), @DOMMatrixReadOnly(),
  @DOMPoint(), @DOMPointReadOnly(), @DOMRect, @DOMRectReadOnly(),
  @DOMQuad(), @CryptoKey(), @AudioData(), @EncodedAudioChunk(),
  @EncodedVideoChunk(), @VideoFrame(), @CropTarget,
  @FileSystemDirectoryHandle(), @FileSystemFileHandle(),
  @GPUCompilationInfo(), @GPUCompilationMessage(),
  @GPUPipelineError(), @RTCCertificate(), @RTCEncodedAudioFrame(),
  @RTCEncodedVideoFrame()
2. 다음 타입들을 미리 정의하는 `jsonpath-plus/src/javascriptTypes.js` import의 값:
@Generator(), @AsyncGenerator(), @GeneratorFunction(),
@AsyncGeneratorFunction(), @Iterable(), @AsyncIterable(), @Iterator()

### 인스턴스 메서드

- ***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](https://tools.ietf.org/html/rfc6901)로
  변환합니다. 문자열은 다음과 같은 형태가 됩니다:
  `/aProperty/anotherProperty/0` (JSON Pointer 사양에 따라
  내부 문자 `~`와 `/`는 이스케이프됨). JSONPath 종단 구문
  `~`와 `^` 그리고 `@string()`과 같은 타입 연산자는 조용히
  제거됩니다.

## 예제를 통한 구문

<http://goessner.net/articles/JsonPath/>에서 가져온 다음 JSON이
주어졌을 때:

```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
  }
}
}
```

and the following XML representation:

```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 예제 포함)를 테스트하려면 [이 데모](http://videlibri.sourceforge.net/cgi-bin/xidelcgi)가 도움이 될 수 있습니다(`xml` 또는 `xml-strict`로 설정).

| XPath                                                                               | JSONPath                                                                  | 결과                                                                                                                                                              | 참고                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|-------------------------------------------------------------------------------------|---------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `/store/book/author`                                                                | `$.store.book[*].author`                                                  | 상점에 있는 모든 책의 저자                                                                                                                               | `$.` 없이 `store.book[*].author`로도 표현할 수 있다(원래 명세에는 없음). 다만 일부 문자 리터럴(`$`와 `@`)은 이스케이프가 필요하다는 점에 유의                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `//author`                                                                          | `$..author`                                                               | 모든 저자                                                                                                                                                         |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `/store/*`                                                                          | `$.store.*`                                                               | 상점에 있는 모든 것, 즉 책들(book 배열)과 빨간 자전거(bicycle 객체).                                                                       |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `/store//price`                                                                     | `$.store..price`                                                          | 상점에 있는 모든 것의 가격.                                                                                                                               |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `//book[3]`                                                                         | `$..book[2]`                                                              | 세 번째 책(book 객체)                                                                                                                                        |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `//book[last()]`                                                                    | `$..book[(@.length-1)]` <br> `$..book[-1:]`                               | 순서상 마지막 책.                                                                                                                                             | 특수 문자가 있는 속성에 접근하려면 필터에 `[(@['...'])]`를 사용한다(이 특정 기능은 원래 명세에는 없음)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `//book[position()<3]`                                                              | `$..book[0,1]` <br> `$..book[:2]`                                         | 처음 두 권의 책                                                                                                                                                 |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `//book/*[self::category\|self::author]` 또는 XPath 2.0의 `//book/(category,author)` | `$..book[0][category,author]`                                             | 모든 책의 카테고리와 저자                                                                                                                             |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `//book[isbn]`                                                                      | `$..book[?(@.isbn)]`                                                      | ISBN 번호가 있는 모든 책 필터링                                                                                                                                | 특수 문자가 있는 속성에 접근하려면 필터에 `[?@['...']]`를 사용한다(이 특정 기능은 원래 명세에는 없음)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `//book[price<10]`                                                                  | `$..book[?(@.price<10)]`                                                  | 가격이 10 미만인 모든 책 필터링                                                                                                                                    |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `//*[name() = 'price' and . != 8.95]`                                               | `$..*[?(@property === 'price' && @ !== 8.95)]`                            | 속성이 price이고 8.95와 같지 않은 객체의 모든 속성 값 가져오기                                                                         | 단독 `@`를 사용하면 (반드시 배열 내에 있지 않더라도) 속성 값으로 객체를 필터링할 수 있으며, 표현식 뒤에 `^`를 추가하면 필터링된 속성을 가진 객체 자체를 얻을 수 있다                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `/`                                                                                 | `$`                                                                       | JSON 객체의 루트(즉, 객체 전체 자체)                                                                                                         | 리터럴 `$`(단독이든 경로 어디에서든)를 얻으려면 백틱 이스케이프를 사용해야 한다                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `//*/*\|//*/*/text()`                                                               | `$..*`                                                                    | XML 문서에서 루트 아래의 모든 요소(및 텍스트). 루트 아래의 JSON 구조의 모든 멤버.                                                          |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `//*`                                                                               | `$..`                                                                     | XML 문서의 모든 요소. 루트를 포함한 JSON 구조의 모든 상위 구성 요소.                                                                          | 이 동작은 원래 명세에 직접 명시되지 않았다                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |

---

[Read more](https://github.com/jsonpath-plus/jsonpath)
도구 다운로드