1个不稳定版本
0.1.0 | 2023年5月31日 |
---|
#25 in #apply
12KB
165 行
Rust JSON简单过滤器库
此库提供在Rust中对JSON数据结构应用一系列过滤器的功能。过滤器由字符串定义,并解析为一系列Filter
结构体,然后可以将其应用于任何JSON数据结构。
特性
- 使用简单的字符串语法定义过滤器。
- 将多个过滤器应用于JSON数据。
- 过滤器可以使用字符串比较、数字比较或两者结合。
- 可选地使用乘数进行数字比较。
用法
定义过滤器
过滤器定义为具有简单语法的字符串
.field = 'value' AND .other_field >= 10
字符串的每个部分通过 " AND " 分隔以定义多个过滤器。
在每个过滤器中
- 要过滤的字段以前缀点 (
.
) 开头。 - 运算符可以是以下之一:
=
、!=
、>
、<
、>=
、<=
。 - 要比较的值可以是字符串(用
'
包围)或数字。
解析过滤器
使用 parse
函数将过滤器字符串解析为 Filter
结构体的列表
let filters = parse(filter_string).unwrap();
应用过滤器
使用 apply
函数将 Filter
结构体的列表应用于JSON数据结构
let v = json!({ "field": "hello", "value": 20 });
let result = apply(&v, &filters);
如果数据通过所有过滤器,则返回 true
,否则返回 false
。
示例
use serde_json::json;
use json_filter::{parse, apply};
let filter_string = ".field = 'hello' AND .value >= 20";
let filters = parse(filter_string).unwrap();
let v = json!({ "field": "hello", "value": 30 });
assert!(apply(&v, &filters));
let v = json!({ "field": "world", "value": 30 });
assert!(!apply(&v, &filters));
测试
该库包含一个测试套件以验证功能。使用 cargo test
运行测试。
依赖项
~0.5–1MB
~20K SLoC