1 个不稳定版本
0.1.0 | 2020 年 6 月 7 日 |
---|
#8 在 #removing
35KB
648 行
jsonschema-equivalent
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