#json #filter #serde-json #comparison #string #parse #apply

simple-json-filter

使用serde_json的简单JSON过滤器

1个不稳定版本

0.1.0 2023年5月31日

#25 in #apply

MIT 许可证

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