compare-json(Rust)
compare-json 是 compare-json 的 Rust 移植版——结构化 JSON 对比,语义与本网站使用的对比引擎完全一致。它可以检测两个 JSON 值之间的新增、删除、类型变更和值变更,并支持控制键、值和数组的匹配方式。同时提供库与 CLI,完整集成 serde。
安装
# CLI
cargo install compare-json
或作为库使用:
[dependencies]
compare-json = "0.1"
快速开始
库
use compare_json::{compare_json, ArrayCompareMethod, CompareOptions};
use serde_json::json;
let base = json!({"name": "Alice", "age": 30});
let contrast = json!({"name": "Bob", "age": "30", "email": "[email protected]"});
let options = CompareOptions::default(); // 数组默认 byIndex,所有开关关闭
let diffs = compare_json(&base, &contrast, &options);
for d in &diffs {
println!("{} {} {}", d.path_string, d.path_belongs_to, d.diff_type);
}
// name both valueChanged
// age both typeChanged
// email contrast added
// 使用选项
let options = CompareOptions {
array_compare_method: Some(ArrayCompareMethod::Lcs), // 或 ByIndex、Unordered
key_case_insensitive: true,
value_case_insensitive: false,
numeric_string_equals_number: true,
};
CLI
# 对比 JSON 文件
compare-json base.json contrast.json
# 数组策略与大小写不敏感匹配
compare-json base.json contrast.json -a lcs -k -v
# 输出机器可读的 JSON
compare-json base.json contrast.json --json-export
# 将报告写入文件
compare-json base.json contrast.json -o diff.txt
选项
| 标志 | 说明 |
|---|---|
-a, --array-compare-method <method> | 数组对比策略:byIndex(默认)、lcs、unordered |
-k, --key-case-insensitive | 键名大小写不敏感对比 |
-v, --value-case-insensitive | 字符串值大小写不敏感对比 |
--numeric-string-equals-number | 将数字字符串视为与数字相等 |
-j, --json-export | 以 JSON 格式输出差异 |
-o, --output <file> | 将输出写入文件而非标准输出 |
许可证
MIT