mcpField
C
Compare JSON

Compare JSON

本地服务
github.com/unitstack开发工具011 周前更新

关于 Compare JSON

面向需要比较 JSON 字符串、值或文件的开发者,提供命令行工具和 MCP 服务。它能识别新增、删除、类型变化和值变化,并支持配置数组与大小写比较方式。

主要功能

  1. 01比较 JSON 值或文件
  2. 02识别四类差异
  3. 03按索引、LCS 或无序方式比较数组
  4. 04支持键和值忽略大小写
  5. 05输出 JSON 或表格
  6. 06将结果写入文件

适用场景

  1. 01检查 JSON 文件间的变化
  2. 02分析 API 或配置数据差异
  3. 03通过 MCP 客户端调用 JSON 比较

MCP 相关

它通过 stdio 作为 MCP 服务运行,并提供 compare_json 工具,返回 JSON 输入间的结构化差异。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"compare-json-cli": {
"command": "npx",
"args": [
"-y",
"@compare-json/cli"
]
}
}
}
启动命令npx -y @compare-json/cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@compare-json/cli

工具

1

收录的工具列表 · 更新于 3 周前

参数类型必填说明
baseJSONany否基准 JSON 值
baseJSONStringstring否基准字符串化 JSON 值
baseJSONFilePathstring否基準 JSON 文件路径
contrastJSONany否对照 JSON 值
contrastJSONStringstring否对照字符串化 JSON 值
contrastJSONFilePathstring否对比 JSON 文件路径
optionsobject否
options.arrayCompareMethodenum是数组比较方法byIndex | lcs | unordered
options.keyCaseInsensitiveboolean是键名比较时不区分大小写
options.valueCaseInsensitiveboolean是值比较时不区分大小写
options.numericStringEqualsNumberboolean是将数字字符串视为数字

详细介绍

@compare-json/cli

用于比较 JSON 文件或字符串的命令行工具和 MCP 服务。基于 @compare-json/core 构建。

在线体验

前往 https://comparejson.com 试用。

安装

# npm
npm install -g @compare-json/cli

# yarn
yarn global add @compare-json/cli

# pnpm
pnpm add -g @compare-json/cli

CLI

快速开始
# View help
compare-json --help

# Compare two JSON strings
compare-json '{"a":1}' '{"a":2}'

# Compare two JSON files
compare-json file1.json file2.json

# Output as JSON format
compare-json file1.json file2.json --json-export

# Save output to file
compare-json file1.json file2.json -o output.txt

# Start the MCP server (stdio transport)
compare-json --mcp
用法
compare-json [base] [contrast] [options]

每个位置参数都可以是内联 JSON 字符串或 JSON 文件路径。CLI 会检查该值:如果它指向现有文件,则解析文件内容;否则,将参数本身解析为 JSON。如果未提供 base 或 contrast(且未设置 --mcp),则会显示帮助信息。

参数
参数说明
[base]基础 JSON 字符串或文件路径
[contrast]对比 JSON 字符串或文件路径
选项
选项别名说明默认值
--array-compare-method <method>-a数组比较方法:byIndex、lcs、unorderedbyIndex
--key-case-insensitive-k不区分大小写地比较键false
--value-case-insensitive-v不区分大小写地比较值false
--numeric-string-equals-number–将数字字符串视为数字false
--json-export-j以 JSON 格式输出false
--output <file>-o将输出写入文件,而非 stdout–
--mcp–通过 stdio 作为 MCP 服务运行false
--version-V显示 CLI 版本–
--help-h显示帮助信息–
示例
基本比较
compare-json '{"name":"Alice","age":30}' '{"name":"Bob","age":30}'

输出:

┌─────────────┬──────────────┐
│ Key         │ Change Type  │
├─────────────┼──────────────┤
│ (Base) name │ valueChanged │
└─────────────┴──────────────┘
比较文件
compare-json base.json contrast.json
数组比较方法
# By index (default)
compare-json '[1,2,3]' '[2,3,4]'

# LCS — minimal diff for ordered arrays
compare-json '[1,2,3]' '[2,3,4]' -a lcs
compare-json '[1,2,3]' '[2,3,4]' --array-compare-method lcs

# Unordered — treat as multisets
compare-json '[1,2,3]' '[3,2,1]' -a unordered
compare-json '[1,2,3]' '[3,2,1]' --array-compare-method unordered
不区分大小写的比较
# Case-insensitive keys
compare-json '{"Name":"Alice"}' '{"name":"Alice"}' -k
compare-json '{"Name":"Alice"}' '{"name":"Alice"}' --key-case-insensitive

# Case-insensitive values
compare-json '{"status":"OK"}' '{"status":"ok"}' -v
compare-json '{"status":"OK"}' '{"status":"ok"}' --value-case-insensitive
数字字符串比较
compare-json '{"count":1}' '{"count":"1"}' --numeric-string-equals-number
JSON 输出
compare-json file1.json file2.json -j
compare-json file1.json file2.json --json-export

输出:

[
  {
    "pathSegments": ["name"],
    "pathString": "name",
    "pathBelongsTo": "both",
    "diffType": "valueChanged"
  }
]
保存到文件
# Save table format
compare-json file1.json file2.json -o diff.txt

# Save JSON format
compare-json file1.json file2.json -j -o diff.json

设置 -o 后,CLI 会将格式化结果写入文件,并向 stdout 输出 Output written to <path>。

输出格式
表格格式(默认)

使用 Unicode 框线绘制的表格。每行都会标明拥有该路径的一侧:

  • (Base) <path> — 该路径存在于基础侧(值或类型变更、删除)。
  • (Contrast) <path> — 该路径仅存在于对比侧(新增)。
  • (Root) — 顶层值本身不同时使用。
┌──────────────┬──────────────┐
│ Key          │ Change Type  │
├──────────────┼──────────────┤
│ (Base) a     │ valueChanged │
│ (Base) b     │ deleted      │
│ (Contrast) c │ added        │
└──────────────┴──────────────┘

两个输入完全一致时,输出如下:

No differences found
JSON 格式
[
  {
    "pathSegments": ["name"],
    "pathString": "name",
    "pathBelongsTo": "both",
    "diffType": "valueChanged"
  },
  {
    "pathSegments": ["age"],
    "pathString": "age",
    "pathBelongsTo": "base",
    "diffType": "deleted"
  },
  {
    "pathSegments": ["email"],
    "pathString": "email",
    "pathBelongsTo": "contrast",
    "diffType": "added"
  }
]

完整结构请参阅 @compare-json/core 中的 JSONValueDifference。

差异类型
类型说明
added值存在于 contrast 中,但不存在于 base 中。
deleted值存在于 base 中,但不存在于 contrast 中。
typeChangedbase 和 contrast 之间的值类型发生变化(例如,number → string)。
valueChanged值发生变化,但类型保持不变。

MCP 服务

@compare-json/cli 还附带一个 MCP(Model Context Protocol) 服务,可将比较引擎作为工具提供给 AI 助手。

启动 MCP 服务
# from a global install
compare-json --mcp

# or via npx
npx @compare-json/cli --mcp

该服务通过 stdio 通信。

可用工具
compare_json

比较两个 JSON 值并返回它们的差异。

输入参数:

参数类型必填描述
baseJSONany条件必填基础 JSON 值(已解析)。
baseJSONStringstring条件必填字符串化形式的基础 JSON(由服务解析)。
baseJSONFilePathstring条件必填基础 JSON 文件的路径(由服务读取并解析)。
contrastJSONany条件必填对比 JSON 值(已解析)。
contrastJSONStringstring条件必填字符串化形式的对比 JSON。
contrastJSONFilePathstring条件必填对比 JSON 文件的路径。
optionsobject否比较选项(见下文)。

必须提供 baseJSON / baseJSONString / baseJSONFilePath 中至少一个,以及 contrastJSON / contrastJSONString / contrastJSONFilePath 中至少一个。同一侧设置多个参数时,优先使用文件路径,其次是字符串,最后是原始值。

选项:

选项类型默认值描述
arrayCompareMethod'byIndex' | 'lcs' | 'unordered''byIndex'数组比较策略。
keyCaseInsensitivebooleanfalse比较键时忽略大小写。
valueCaseInsensitivebooleanfalse比较值时忽略大小写。
numericStringEqualsNumberbooleanfalse将数字字符串视为与数字相等。

输出:

返回 structuredContent.differences(一个 JSONValueDifference 对象数组),以及 content[0].text 中相同数据的 JSON 文本镜像。

{
  "differences": [
    {
      "pathSegments": ["name"],
      "pathString": "name",
      "pathBelongsTo": "both",
      "diffType": "valueChanged"
    }
  ]
}
MCP 客户端配置

将以下内容添加到 MCP 客户端配置中(例如 mcp.json):

{
  "mcpServers": {
    "compare-json": {
      "command": "npx",
      "args": ["@compare-json/cli@latest", "--mcp"]
    }
  }
}

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。