17个版本
0.1.16 | 2024年3月29日 |
---|---|
0.1.15 | 2024年3月8日 |
0.1.13 | 2024年2月15日 |
0.1.10 | 2024年1月29日 |
0.1.3 | 2023年12月26日 |
#518 在 编码
130KB
3K SLoC
JSON Predicate
Snell Json Predicate Draft 07的部分实现。
即使这个草案已经过期,它仍然是一个相当好的JSON谓词草案。
简介
本规范定义了JSON谓词,这是一种基于RFC4627的JSON语法,用于描述和序列化逻辑布尔谓词操作,旨在与其他JSON机制(如JSON Patch RFC6902)一起使用,作为实现条件处理的一种手段。
JSON谓词可以用来扩展JSON Patch RFC6902文档,以提供更广泛的条件处理选项,这些选项目前不支持JSON Patch。
示例
给定这个JSON
{
"a": {
"b": {
"c": "ABC!XYZ"
}
}
}
我们可以有一个这样的谓词
{
"op": "and",
"path": "/a/b/c",
"apply": [
{
"op": "type",
"value": "string"
},
{
"op": "contains",
"value": "ABC"
}
]
}
如果与之前的JSON进行评估,则将评估为 true
。
Rust示例
let predicate = Predicate::deserialize(serde_json::json!({
"op": "and",
"path": "/objA",
"apply": [
{
"op": "defined",
"path": "/stringX"
},
{
"op": "defined",
"path": "/stringXYZ"
}
],
}))?;
let evaluted_predicate: bool = predicate
.test(&ENTRY, PredicateContext::default());
JSON Patch
draft-snell-json-test-07中描述的JSON Patch方法尚未实现。
特性
一阶谓词
- "contains"
- "contains-"
- "defined"
- "undefined"
- "starts"
- "starts-"
- "ends"
- "ends-"
- "type"
- "in"
- "in-"
- "matches"
- "matches-"
- "test"
- "test-"
- "less"
- "more"
二阶谓词
- "and"
- "not"
- "or"
参考文献
许可证
许可协议为以下之一
- Apache License,版本2.0(LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)由您选择。
依赖项
~6–8.5MB
~147K SLoC