mirror of
https://github.com/Orange-OpenSource/hurl.git
synced 2024-11-13 06:54:54 +03:00
Update doc for jsonpath module
This commit is contained in:
parent
fc9e8a97f6
commit
5b911602d5
@ -16,12 +16,11 @@
|
||||
*
|
||||
*/
|
||||
|
||||
mod selector;
|
||||
pub mod query;
|
||||
mod selector;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub enum JsonpathResult {
|
||||
SingleEntry(serde_json::Value), // returned by a "definite" path
|
||||
Collection(Vec<serde_json::Value>), // returned by a "indefinite" path
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,8 @@ use crate::jsonpath::ast::Query;
|
||||
use crate::jsonpath::JsonpathResult;
|
||||
|
||||
impl Query {
|
||||
/// Eval a JSONPath `Query` for a `serde_json::Value` input.
|
||||
/// It returns an Option<`JsonResultPath`>.
|
||||
pub fn eval(&self, value: &serde_json::Value) -> Option<JsonpathResult> {
|
||||
let mut result = JsonpathResult::SingleEntry(value.clone());
|
||||
for selector in &self.selectors {
|
||||
@ -53,8 +55,6 @@ mod tests {
|
||||
use crate::jsonpath::JsonpathResult;
|
||||
use serde_json::json;
|
||||
|
||||
|
||||
|
||||
pub fn json_root() -> serde_json::Value {
|
||||
json!({ "store": json_store() })
|
||||
}
|
||||
|
@ -19,18 +19,19 @@
|
||||
//! JSONPath specs.
|
||||
//!
|
||||
//! There is no proper specifications for JSONPath.
|
||||
//! The de-facto one is still <https://goessner.net/articles/JsonPath/>
|
||||
//! The de-facto one is still <https://goessner.net/articles/JsonPath/>.
|
||||
//!
|
||||
//! Hurl will try to follow this one as closely as possible
|
||||
//!
|
||||
//! There are a few edge cases for which several implementations differ
|
||||
//! The online app <https://jsonpath.herokuapp.com/> might be used to test them
|
||||
//! There are a few edge cases for which several implementations differ.
|
||||
//!
|
||||
//! We describe below the behaviour that we expect in Hurl.
|
||||
//!
|
||||
//! Specify a field key in a subscript operator: `$['name']`
|
||||
//! Specify a field key in a subscript operator: `$['name']`.
|
||||
//! The key must be enclosed within single quotes only.
|
||||
//! The following expressions will not be valid: `$["name"]` and `$[name]`
|
||||
//! The following expressions will not be valid: `$["name"]` and `$[name]`.
|
||||
//!
|
||||
//! Accessing a key containing a single quote must be escape: `$['\'']`
|
||||
//! Accessing a key containing a single quote must be escape: `$['\'']`.
|
||||
//! Key with unicode are supported: `$['✈']`
|
||||
//!
|
||||
//! Any character within these quote won't have a specific meaning:
|
||||
@ -38,10 +39,10 @@
|
||||
//! - `$['.']` selects the element with key '.'.
|
||||
//!
|
||||
//! The dot notation is usually more readable the the bracket notation
|
||||
//! but it is more limited in terms of allowed characters
|
||||
//! but it is more limited in terms of allowed characters.
|
||||
//! The following characters are allowed:
|
||||
//! alphanumeric
|
||||
//! _ (underscore)
|
||||
//! - alphanumeric
|
||||
//! - _ (underscore)
|
||||
//!
|
||||
//! Filters can be applied to element of an array with the `?(@.key PREDICATE)` notation.
|
||||
//! The key can can specify one or more levels.
|
||||
@ -49,7 +50,14 @@
|
||||
//! The predicate if not present just checks the key existence.
|
||||
//!
|
||||
//! The Hurl API for evaluating a jsonpath expression does not always return a collection (as defined in the jsonpath spec).
|
||||
//! It returns an optional value, which is either a collection or a single value.
|
||||
//! It returns an optional value, which is either a collection or a single value (scalar).
|
||||
//! Note that other implementations (such as the Java lib <https://github.com/json-path/JsonPath>) also distinguish between node value (definite path) and collection (indefinite path).
|
||||
//!
|
||||
//! Note that the only selectors returning a scalar are:
|
||||
//! - array index selector ($.store.book[2])
|
||||
//! - object key selector ($.store.bicycle.color/$.store.bicycle['color'])
|
||||
//!
|
||||
//! This will make testing the value a bit easier.
|
||||
//!
|
||||
|
||||
pub use self::eval::JsonpathResult;
|
||||
|
Loading…
Reference in New Issue
Block a user