Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
JSONPath — http://goessner.net/articles/JsonPath/ からの JSONPath のフォーク | Kitploit
ツール/GitHubGitHub/jsonpath-plus/jsonpath
汎用ユーティリティ静的分析コード分析スクリプトと自動化ユーティリティとフレームワーク
GitHubjsonpath-plus/jsonpath

JSONPath

http://goessner.net/articles/JsonPath/ からの JSONPath のフォーク

リポジトリを見る
1.2k200420日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

npm

testing badge coverage badge

Known Vulnerabilities

Licenses badge

Node.js CI status

(開発依存関係のライセンスも参照してください:licenses for dev. deps.)

JSONPath Plus

JSONドキュメント(およびJavaScriptオブジェクト)からデータを分析、変換、選択的に抽出します。

jsonpath-plus は元の仕様を拡張し、いくつかの追加演算子を加え、元の仕様が明確にしていなかった動作を明示します。

ブラウザデモ または Runkit (Node) をお試しください。

注意:このプロジェクトは現在積極的にはメンテナンスされていません。十分に文書化されたPRや簡単な更新は受け付ける場合がありますが、修正や新機能の追加を自ら行う予定はありません。

特徴

  • 元のjsonpath仕様に準拠
  • 元の仕様にはない便利な追加・拡張:
    • 一致した項目の親を取得するための ^
    • 一致した項目のプロパティ名を(配列として)取得するための ~
    • 以下を取得するための型セレクター:
      • 基本的なJSON型:@null()、@boolean()、@number()、@string()、@array()、@object()
      • @integer()
      • 複合型 @scalar()(JavaScriptオブジェクトをクエリする際には undefined や非有限数も受け入れ、基本的な非オブジェクト・非関数型もすべて受け入れます)
      • ユーザー定義の 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});

Browser

ブラウザで使用する場合は、dist/index-browser-umd.cjs を直接インクルードできます。Browserify の仕掛けは不要です。```html

root@kitploit:~
### 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 には、ブラウザビルド用に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 (デフォルト: {}) - フィルタリング式などのコード評価で利用可能な 変数のキーと値のマップ。(現在のパスと値もそれらの式で利用可能になることに注意してください。 詳細は構文セクションを参照してください。)
  • 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() のような型演算子は静かに削除されます。

例による構文

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

root@kitploit:~
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のものも含む)をテストするには、このデモが役立つかもしれません(xmlまたはxml-strictに設定してください)。| XPath | JSONPath | 結果 | 備考 | |-------------------------------------------------------------------------------------|---------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | /store/book/author | $.store.book[*].author | ストア内のすべての本の著者 | を付けずに と表記することも可能(ただし、これは元の仕様には存在しない)。一部の文字リテラル( と )はエスケープが必要な点に注意 | | | | すべての著者 | | | | | ストア内のすべてのもの。つまり、その本(本の配列)と赤い自転車(自転車オブジェクト)。 | | | | | ストア内のすべてのものの価格。 | | | | | 3番目の本(本オブジェクト) | | | | | 順序における最後の本。 | 特殊文字を含むプロパティにアクセスするには、フィルタに を利用する(この特定の機能は元の仕様には存在しない) | | | | 最初の2冊の本 | | | または XPath 2.0 の | | すべての本のカテゴリと著者 | | | | | ISBN番号を持つすべての本をフィルタリング | 特殊文字を含むプロパティにアクセスするには、フィルタに を利用する(この特定の機能は元の仕様には存在しない) | | | | 10より安いすべての本をフィルタリング | | | | | プロパティが price であり、かつ 8.95 と等しくないオブジェクトのすべてのプロパティ値を取得 | 裸の を使用すると、プロパティ値によってオブジェクトをフィルタリングできる(必ずしも配列内である必要はない)。式の後に を追加すると、フィルタリングされたプロパティを持つオブジェクトを取得できる | | | | JSONオブジェクトのルート(つまり、オブジェクト自体全体) | リテラルの (単独またはパス内のどこでも)を取得するには、バッククォートエスケープを使用する必要がある | | | | XMLドキュメントのルート以下のすべての要素(およびテキスト)。JSON構造のルート以下のすべてのメンバー。 | | | | | XMLドキュメント内のすべての要素。ルートを含むJSON構造のすべての親コンポーネント。 | この動作は元の仕様では直接指定されていなかった | | | | 価格が19より大きい特定のアイテムの親(つまり、自転車の親としてのストア値、および個々の本の親としての本の配列) | 親(キャレット)は元の仕様には存在しない | | (XPath 2.0) | | ストアサブオブジェクトのプロパティ名("book" と "bicycle")。ワイルドカードプロパティで有用。 | プロパティ名(チルダ)は元の仕様には存在しない | | (XPath 2.0) | | 最初の本を指すパスにある本以外のすべての本 | は元の仕様には存在しない | | | | 本の親オブジェクトが、色が赤である自転車の子を持つ本のすべてのカテゴリを取得(つまり、すべての本) | は元の仕様には存在しない | | | | "book" のすべての子のうち、"category" のものを除いて取得 | は元の仕様には存在しない | | | | プロパティ(配列内に入るため数値インデックスとなる)が0ではないすべての本を取得 | は元の仕様には存在しない | | | | 親プロパティが book ではないストアの孫を取得(つまり、自転車の子、"color" と "price") | は元の仕様には存在しない | | | | これらの値の親プロパティ(つまり、本アイテムの親オブジェクトを保持する配列インデックス)が0ではない、すべての本インスタンスのプロパティ値を取得 | は元の仕様には存在しない | | | | 価格が3番目の本の価格と等しいすべての本をフィルタリング | は元の仕様には存在しない | | (XPath 2.0) | | 本の配列内の数値を取得 | 、その他の基本型(、)、その他の低レベル派生型(、、)、JSONSchema で追加された型 、複合型 (JavaScript オブジェクトの と非有限数、および基本的な非オブジェクト/非関数型のすべても受け入れる)、ユーザー定義コールバックと組み合わせて使用する型 ( を参照)、および JSONPath で非 JSON の JavaScript オブジェクトをクエリする際に使用できる以下の非 JSON 型(、、)は元の仕様には存在しない | | (XPath 2.0) | | 正規表現に一致する(大文字小文字を区別せず 'TION' で終わる)すべての本のカテゴリ | は元の仕様には存在しない。 | | (XPath 2.0) | | 正規表現に一致するプロパティを持つすべての本(大文字小文字を区別せず 'TION' で終わる) | は元の仕様には存在しない。注: 式の最後に親セレクタ を使用して親オブジェクトに戻る。親セレクタがない場合、2つの キー値に一致する。 | | | (例: でリテラルに という名前のプロパティに一致) | 後続のシーケンス全体をエスケープする(リテラルとして扱う) | は元の仕様には存在しない。リテラルのバッククォートを取得するには、追加のバッククォートでエスケープする | を使用してアクセスします。

アイデア

  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ライセンス。

ツールをダウンロード
  • 非JSONのJavaScriptオブジェクトをクエリする際に使用できる非JSON型(@undefined()、@function()、@nonFinite())
  • フィルター内での @path/@parent/@property/@parentProperty/@root ショートハンドセレクター
  • エスケープ
    • 残りのシーケンスをエスケープするための `
    • フィルター内のプロパティ名で特殊文字をエスケープするための @['...']/?@['...'] 構文
  • $.. のドキュメント(すべての親コンポーネントの取得)
  • ESM および UMD エクスポート形式
  • クエリされた値に加えて、値へのパスやポインター、親オブジェクトや親プロパティ名などのさまざまなメタ情報を返すことが可能(変更を可能にするため)。
  • パス、配列、ポインター間の変換のためのユーティリティ
  • 元の仕様で許可されている評価を防止するオプション、または評価値用のサンドボックスを提供するオプション
  • 結果が取得されたときに処理するためのコールバックオプション
  • false
  • eval (デフォルト: "safe") - スクリプト評価メソッド。 safe: ブラウザでは、eval や Function を使用せず、Content Security Policy を満たす 最小限のスクリプトエンジンを使用します。NodeJS では、効果がなく、スクリプトがそこで安全であるため native と同等です。 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 (デフォルト: (なし)) - 指定された場合、エンドポイント値の取得時に コールバックが直ちに呼び出されます。提供される 3 つの引数は、ペイロードの値(resultType に従う)、 ペイロードの型(通常の "value" か "property" 名か)、および完全なペイロードオブジェクト (すべての resultType を含む)です。
  • otherTypeCallback (デフォルト: <@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
    `
    `$
    $
    `
    npx jsonpath-plus <json-file> <jsonpath-query>