首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CLI工具,用于比较2个JSON文件,而不考虑数据对象的顺序,并返回一个错误级别的环境变量

CLI工具,用于比较2个JSON文件,而不考虑数据对象的顺序,并返回一个错误级别的环境变量
EN

Software Recommendation用户
提问于 2020-12-28 21:31:00
回答 2查看 1.8K关注 0票数 1

我正在搜索一个CLI (Windows)工具来比较两个JSON文件。

诀窍是JSON文件中的数据对象可能有不同的顺序(位置)。即使数据对象的顺序发生了变化,如果对象本身没有变化,我也希望工具能够报告这些文件是等价的。

我想从脚本中运行这个工具,所以如果文件是相同的,它需要在没有交互的情况下运行。当文件不等价时,我可以强制使用UI,但这不是首选。

<#>Because它将从脚本中运行,一个困难的要求是它返回一个错误级别的环境变量,我可以使用它来确定两个JSON文件是否等价。

CLI确实是我所喜欢的,但是一个符合上述标准的GUI也能工作。所以请不要犹豫,也可以推荐。

相关:用于JSON文件的Diff工具?

EN

回答 2

Software Recommendation用户

发布于 2020-12-29 11:52:34

您可以通过jq (可用作为一个小的Windows二进制文件)运行这两个文件,让jq根据您的需要对两个文件中的数据进行漂亮的打印和排序,然后执行“普通”diff (使用WinDiff、Meld、漫射)。

shell命令将是

代码语言:javascript
复制
 < file1.json jq  'keys' > file1.sorted.json
 < file2.json jq  'keys' > file2.sorted.json

diff file1.sorted.json file2.sorted.json

# or better

diff -q file1.sorted.json file2.sorted.json

#
#       -q, --brief
#              report only when files differ

# if output of diff -q is nonempty, files differ -> raise an error

如果您知道发生了什么,请继续处理未修改的文件。

这显然只有在JSON对象的键不同的情况下才能起作用。这还假设保留了类型信息(例如,浮点数的字符串表示在两个文件之间没有区别)

如果JSON对象在对象值上存在差异,或者如果值包含嵌套对象(它们本身在值或子键排序上可能不同),或者如果您希望第一级键的顺序保持不变,但只需要通过其他条件比较嵌套的“值-对象”,那么您将需要更复杂的jq命令。查看stackoverflow.com -一些难以置信的jq专家在那里。

票数 1
EN

Software Recommendation用户

发布于 2020-12-29 06:37:23

您试过查看GNU (比较)吗?Diff特别有"-B“或”--忽略-空白-行“开关,它”忽略行为空的更改“(另见关于堆栈交换的类似问题)。

还有其他方法和变体来实现您提到的事情,例如使用维迪夫

如果您想采用编程方法,则可能需要查看Levenshtein距离,它是度量两个字符串之间差异的度量标准。

票数 0
EN
页面原文内容由Software Recommendation提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwarerecs.stackexchange.com/questions/77471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档