
(開発依存関係のライセンスも参照してください:licenses for dev. deps.)
JSONドキュメント(およびJavaScriptオブジェクト)からデータを分析、変換、選択的に抽出します。
jsonpath-plus は元の仕様を拡張し、いくつかの追加演算子を加え、元の仕様が明確にしていなかった動作を明示します。
ブラウザデモ または Runkit (Node) をお試しください。
注意:このプロジェクトは現在積極的にはメンテナンスされていません。十分に文書化されたPRや簡単な更新は受け付ける場合がありますが、修正や新機能の追加を自ら行う予定はありません。
^~@null()、@boolean()、@number()、@string()、@array()、@object()@integer()@scalar()(JavaScriptオブジェクトをクエリする際には undefined や非有限数も受け入れ、基本的な非オブジェクト・非関数型もすべて受け入れます)otherTypeCallback と組み合わせて使用できる @other()@undefined()、@function()、@nonFinite())@path/@parent/@property/@parentProperty/@root ショートハンドセレクター`@['...']/?@['...'] 構文$.. のドキュメント(すべての親コンポーネントの取得)jsonpath-plus は、json-querying-performance-testing によると、他のJSONクエリライブラリと比較して、大規模および小規模のデータセットの両方で一貫して高性能です。これらの結果は、プロジェクトを自分で実行 して、さらにパフォーマンスケースを追加することで検証できます。
npm install jsonpath-plus
## セットアップ
### Node.js```js
const {JSONPath} = require('jsonpath-plus');
const result = JSONPath({path: '...', json});
ブラウザで使用する場合は、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>
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 メソッド(最初の引数として)で 指定できるプロパティには、以下が含まれます:
false として指定された場合、
evaluate メソッドを手動で呼び出すことができます。wrap が false に設定され、
結果が見つからない場合、undefined が返されます(wrap が true に設定されている場合の
空の配列とは対照的です)。wrap が false に設定され、単一の非配列の結果が見つかった場合、
その結果が唯一の返されるアイテムになります(配列内ではありません)。ただし、複数の結果が
見つかった場合は、依然として配列が返されます。曖昧さを避けるため(失敗である結果と
空の配列である結果を区別する必要がある場合)、デフォルトを false に切り替えることを
お勧めします。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 を
呼び出すことでコードが評価されるクラス。
``parentProperty を結果内で返すことができます。これは
文字列のプロパティ名または数値の配列インデックスである場合があります。resultType に従う)、
ペイロードの型(通常の "value" か "property" 名か)、および完全なペイロードオブジェクト
(すべての resultType を含む)です。@other() を追加することで、
組み込み型を超えた型を決定できます。そのようなパスが検出された場合、otherTypeCallback は
アイテムの値、そのパス、その親、およびその親のプロパティ名とともに呼び出され、
指定された値が "other" 型に属するかどうかを示すブール値を返す必要があります
(または変換を処理して false を返すこともできます)。autostart プロパティが false に設定されている場合にのみ必要です。
同じ設定を使用した繰り返しの評価に使用できます。
リストされたプロパティに加えて、後者のメソッドパターンは、
他の許可されたインスタンスプロパティのいずれも受け入れることができます
(ここでは関連性のない autostart を除く)。