#json #predicate #processing #conditional #patch #operations #path

json-predicate

基于draft-snell-json-07的JSON谓词库

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编码

MIT/Apache

130KB
3K SLoC

JSON Predicate

release Crates.io version dependency status docs.rs docs PRs Welcome

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"

参考文献

许可证

许可协议为以下之一

依赖项

~6–8.5MB
~147K SLoC