compare-json(Rust)

compare-json 是 compare-json 的 Rust 移植版——结构化 JSON 对比,语义与本网站使用的对比引擎完全一致。它可以检测两个 JSON 值之间的新增、删除、类型变更和值变更,并支持控制键、值和数组的匹配方式。同时提供库与 CLI,完整集成 serde。

语言:Rust —— 通过 crates.io 分发。源码见 GitHub。

安装

# 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