1 unstable release
0.1.0 | Nov 29, 2023 |
---|
#626 in Data structures
2,520 downloads per month
105KB
2.5K
SLoC
sql-json-path
SQL/JSON Path implementation in Rust.
Features
- Compatible with SQL/JSON Path standard and PostgreSQL implementation.
- Independent from JSON implementation. It supports popular libraries like
serde_json
,simd-json
andjsonbb
. Custom JSON types are also supported.
Usage
use serde_json::{json, Value};
use sql_json_path::JsonPath;
let json = json!({"a": 1});
let path = JsonPath::new("$.a").unwrap();
let nodes = path.query(&json).unwrap();
assert_eq!(nodes.len(), 1);
assert_eq!(nodes[0].to_string(), "1");
JSON Path Syntax
See PostgreSQL documentation for more details.
-
strict
andlax
mode -
$
: Root object -
@
: Current object -
[index]
: An array element by index-
[start to end]
: An array slice -
[index1, index2, ...]
: Multiple array elements -
[last]
: The last array element
-
-
.name
: An object member by name -
[*]
: Any array element -
.*
: Any object member -
.**
: Any descendant object member (Postgres extension) -
?(predicate)
: Filter expression-
==
,!=
/<>
,<
,<=
,>
,>=
: Comparison -
&&
,||
,!
: Logical operators -
is unknown
: Check if the value is unknown -
like_regex
: Check if the string matches the regular expression -
starts with
: Check if the string starts with the given prefix -
exists(expr)
: Check if the expression matches any value
-
- Operations
-
+
: Addition / Unary plus -
-
: Subtraction / Negation -
*
: Multiplication -
/
: Division -
%
: Modulo
-
- Methods
-
.type()
-
.size()
-
.double()
-
.ceiling()
-
.floor()
-
.abs()
-
.datetime()
-
.datetime(template)
-
.keyvalue()
-
Testing
This crate is tested against PostgreSQL regression tests: cargo test --test pg_jsonb_jsonpath
. 325 out of 430 tests are passed. 96 tests are skipped because they have unsupported features. 9 tests are failed because of incorrect implementation.
License
Licensed under Apache License, Version 2.0.
Dependencies
~3.5–6.5MB
~123K SLoC