1 unstable release
| 0.1.0 | Nov 29, 2023 |
|---|
#771 in Data structures
3,095 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-jsonandjsonbb. 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.
-
strictandlaxmode -
$: 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