アップデート一覧に戻る
New releaseAug 17, 2026

JSONPath v10.4.1

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

共有

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()
      • 非JSONのJavaScriptオブジェクトをクエリする際に使用できる非JSON型(@undefined()、@function()、@nonFinite())
    • フィルター内での @path/@parent/@property/@parentProperty/@root ショートハンドセレクター
    • エスケープ
      • 残りのシーケンスをエスケープするための `
      • フィルター内のプロパティ名で特殊文字をエスケープするための @['...']/?@['...'] 構文
    • $.. のドキュメント(すべての親コンポーネントの取得)
  • ESM および UMD エクスポート形式
  • クエリされた値に加えて、値へのパスやポインター、親オブジェクトや親プロパティ名などのさまざまなメタ情報を返すことが可能(変更を可能にするため)。
  • パス、配列、ポインター間の変換のためのユーティリティ
  • 元の仕様で許可されている評価を防止するオプション、または評価値用のサンドボックスを提供するオプション
  • 結果が取得されたときに処理するためのコールバックオプション

ベンチマーク

jsonpath-plus は、json-querying-performance-testing によると、他のJSONクエリライブラリと比較して、大規模および小規模のデータセットの両方で一貫して高性能です。これらの結果は、プロジェクトを自分で実行 して、さらにパフォーマンスケースを追加することで検証できます。

インストール```shell

npm install jsonpath-plus

## セットアップ

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

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

Browser

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

### 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});

## 使用方法

利用可能な完全なシグネチャは次のとおりです:```
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 に設定され、単一の非配列の結果が見つかった場合、 その結果が唯一の返されるアイテムになります(配列内ではありません)。ただし、複数の結果が 見つかった場合は、依然として配列が返されます。曖昧さを避けるため(失敗である結果と 空の配列である結果を区別する必要がある場合)、デフォルトを 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 を返すこともできます)。

インスタンスメソッド

  • evaluate(path, json, callback, otherTypeCallback) または evaluate({path: <path>, json: <json object>, callback: <callback function>, otherTypeCallback: <otherTypeCallback function>}) - このメソッドは、 autostart プロパティが false に設定されている場合にのみ必要です。 同じ設定を使用した繰り返しの評価に使用できます。 リストされたプロパティに加えて、後者のメソッドパターンは、 他の許可されたインスタンスプロパティのいずれも受け入れることができます (ここでは関連性のない autostart を除く)。

クラスのプロパティとメソッド

カテゴリ