問題タブ [json-path-expression]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jsonpath - Filter を使用した Json Path 論理 NOT 演算子が機能しない
JSON データがあり、JSONPath で論理否定演算子を使用したいのですが、入力文字列が JSONPath クエリに変換する多くのフィルターで構成されているため、動的に使用したいと考えています。
v1/movie?filter=not metadata.sample eq "NETFLIX"
このように私は APY を使用しています。[?(!(@['metadata']['PLM-CODE'] == 'NETFLIX'))]
これは、JSONPath の Filter オブジェクトを使用するように変換する必要があります。
今、これは完全に機能します
!
しかし、以下のコードを使用する場合、直接追加することはできません:
しかし、パースはそれをに変換しています[?(@['metadata']['PLM-CODE'] == 'NETFLIX' ! null)]
c# - jsonpath 式が true と評価された場合に SelectTokens() でルート要素を選択する方法
そのため、現時点ではいくつかのトークン フィルタリングに取り組んでおり、SelectTokens() メソッドを使用して C# のフィルター条件に基づいてトークンをフィルター処理する必要がある状況があります。単一の値がクエリに一致する場合、私は簡潔にするために、すべてのオブジェクトおよび/またはルート要素が必要です。これは、フィルタリングを適用する基になる配列の1つです。
たとえば、単一の値が 10 を超える場合、その配列内のすべての要素が必要であり、それ以外の場合は戻り値が必要ないため、次のようなクエリを使用する場合: $[?($[?(@.unitPrice >= 10)] empty false)]
SelectTokens() 呼び出しで、まったく同じリストが返されるか、比較値が 13 を超える場合は空の配列を取得します。
この例は、 https: //jsonpath.herokuapp.com/ などの特定のテスターでクエリを実行すると問題なく動作しますが、他のほとんどのテスターや自分の C# コードでは無効に見えるため、これを取得するための他の方法を見つけようとしました。同じクエリ機能であり、この機能を実装する有効な方法を見つけるたびに、Newtonsoft.Json.Linq.SelectTokens()
使用している実際のメソッド内では機能しないことがわかります。
実際のクエリ内で演算子を使用しようとすると、$
newtonsoft の jsonpath の実装内で動作することを拒否するだけのようで、私と同じことを達成しようとしている人を見つけることができないようです。 newtonsoftの実装で動作するこれを達成する簡単な方法があれば.
これは、配列ではなく単一のトークン用ですが、私がやろうとしていることに最も近いものですが、それも特定のテスター内でのみ機能します