Crates.io | json-filter |
lib.rs | json-filter |
version | |
source | src |
created_at | 2024-12-26 08:28:37.960695+00 |
updated_at | 2025-04-13 13:30:38.805622+00 |
description | A library for filtering JSON values using simple query structs / enums |
homepage | |
repository | https://github.com/Sliman4/json-filter |
max_upload_size | |
id | 1495509 |
Cargo.toml error: | TOML parse error at line 17, column 1 | 17 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
This crate allows checking if serde_json::Value
matches a filter (which is JSON serializable too).
Examples:
use serde_json::json;
use json_filter::{Filter, Operator};
#[test]
fn test_numeric_operators() {
let value = json!({ "age": 25 });
let filter = Filter::new("age", Operator::GreaterThan(20.0));
assert!(filter.check(&value).unwrap());
let filter = Filter::new("age", Operator::LessThan(30.0));
assert!(filter.check(&value).unwrap());
let filter = Filter::new("age", Operator::GreaterOrEqual(25.0));
assert!(filter.check(&value).unwrap());
let filter = Filter::new("age", Operator::LessOrEqual(25.0));
assert!(filter.check(&value).unwrap());
}
#[test]
fn test_string_operators() {
let value = json!({ "name": "John Doe" });
let filter = Filter::new("name", Operator::StartsWith("John".to_string()));
assert!(filter.check(&value).unwrap());
let filter = Filter::new("name", Operator::EndsWith("Doe".to_string()));
assert!(filter.check(&value).unwrap());
let filter = Filter::new("name", Operator::Contains("hn D".to_string()));
assert!(filter.check(&value).unwrap());
}
#[test]
fn test_array_operators() {
let value = json!({ "tags": ["rust", "coding", "json"] });
let filter = Filter::new("tags", Operator::ArrayContains(json!("rust")));
assert!(filter.check(&value).unwrap());
let filter = Filter::new("tags[1]", Operator::Equals(json!("coding")));
assert!(filter.check(&value).unwrap());
}
#[test]
fn test_object_operators() {
let value = json!({
"user": {
"id": 123,
"details": {
"email": "john@example.com"
}
}
});
let filter = Filter::new("user", Operator::HasKey("id".to_string()));
assert!(filter.check(&value).unwrap());
let filter = Filter::new(
"user.details.email",
Operator::EndsWith("@example.com".to_string()),
);
assert!(filter.check(&value).unwrap());
}
#[test]
fn test_logical_operators() {
let value = json!({
"age": 25,
"name": "John Doe"
});
let filter = Filter::new(
".",
Operator::And(vec![
Filter::new("age", Operator::GreaterThan(20.0)),
Filter::new("name", Operator::StartsWith("John".to_string())),
]),
);
assert!(filter.check(&value).unwrap());
let filter = Filter::new(
".",
Operator::Or(vec![
Filter::new("age", Operator::GreaterThan(30.0)),
Filter::new("name", Operator::Contains("John".to_string())),
]),
);
assert!(filter.check(&value).unwrap());
}