1 个不稳定版本

0.1.0 2020 年 6 月 7 日

#8#removing

MIT 许可证

35KB
648

jsonschema-equivalent

ci codecov Crates.io docs.rs

A JSON Schema 优化库。

主要思想是简化输入模式,并移除对模式没有任何限制的关键词。可能的示例包括

  • {"type": "string", "minimum": 0} 等价于 {"type": "string"} 因为 minimum 关键词只适用于数字类型
  • {"allOf": [{"type": "integer"}, {"type": "number"}]} 等价于 {"type": "number"} 因为 integer 包含在 number
  • {"allOf": [{"type": "integer"}, {"type": "string"}]} 等价于 {"type": ["integer", "string"]}
  • 以及更多(完整列表可在所有规则页面查看)。

通过简化并删除多余/不一致的关键字,我们能够提供更小且等效的模式。因此,JSON验证器可以花费CPU周期验证实际对模式提供限制的组件,而不是验证我们知道预先不适用于某些上下文的情况。

如何使用

# Cargo.toml
jsonschema-equivalent = "0"

验证文档与某些模式,并获取验证错误(如果有)

use jsonschema_equivalent::jsonschema_equivalent;
use serde_json::json;

fn main() {
    let schema = json!({"type": "string", "minimum": 42});
    println!("Original schema: {}", schema);
    let equivalent_schema = jsonschema_equivalent(schema);
    println!("Equivalent schema: {}", equivalent_schema);
}

注意。此库处于早期开发阶段,因此可能无法涵盖所有可能的模式简化模式。如果您发现新的优化模式方法,请随时打开一个问题,描述该方法(附带示例)或提供拉取请求。欢迎贡献。

依赖关系

~0.5–1MB
~21K SLoC