compare-json(Go)
compare-json-go 是 compare-json 的 Go 移植版——结构化 JSON 对比,语义与本网站使用的对比引擎完全一致。它可以检测两个 JSON 值之间的新增、删除、类型变更和值变更,并支持控制键、值和数组的匹配方式。同时提供库与 CLI,零外部依赖。
语言:Go —— 通过 pkg.go.dev 分发。源码见 GitHub。
安装
go get github.com/unitstack/compare-json-go
快速开始
库
package main
import (
"encoding/json"
"fmt"
comparejson "github.com/unitstack/compare-json-go"
)
func main() {
var base, contrast interface{}
json.Unmarshal([]byte(`{"name":"Alice","age":30}`), &base)
json.Unmarshal([]byte(`{"name":"Bob","age":"30","email":"[email protected]"}`), &contrast)
diffs := comparejson.CompareJSON(base, contrast, &comparejson.CompareOptions{
ArrayCompareMethod: comparejson.ArrayCompareByIndex, // 或 ArrayCompareLCS、ArrayCompareUnordered
})
for _, d := range diffs {
fmt.Println(d.PathString, d.PathBelongsTo, d.DiffType)
}
// name both valueChanged
// age both typeChanged
// email contrast added
}
CLI
# 对比 JSON 文件
compare-json base.json contrast.json
# 数组策略与大小写不敏感匹配
compare-json -a lcs -k -v base.json contrast.json
# 输出机器可读的 JSON
compare-json --json-export base.json contrast.json
# 将报告写入文件
compare-json -o diff.txt base.json contrast.json
注意:由于使用标准库 flag 包,标志必须放在位置参数之前。
选项
| 标志 | 说明 |
|---|---|
-a, --array-compare-method | 数组对比策略:byIndex(默认)、lcs、unordered |
-k, --key-case-insensitive | 键名大小写不敏感对比 |
-v, --value-case-insensitive | 字符串值大小写不敏感对比 |
--numeric-string-equals-number | 将数字字符串视为与数字相等 |
-j, --json-export | 以 JSON 格式输出差异 |
-o, --output <file> | 将输出写入文件而非标准输出 |
许可证
MIT