
JSONPath v10.4.1
http://goessner.net/articles/JsonPath/ からの JSONPath のフォーク
(開発依存関係のライセンスも参照してください: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())
- 基本的なJSON型:
- フィルター内での
@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を除く)。