当前位置: 首页 > 知识库问答 >
问题:

使用jq或替代命令行工具比较JSON文件

夏侯瑞
2023-03-14

是否有任何命令行实用工具可以用来查找两个JSON文件是否具有字典内键和列表内元素顺序的不变性?

这可以用jq或其他等效工具来完成吗?

这两个JSON文件是相同的

{
  "People": ["John", "Bryan"],
  "City": "Boston",
  "State": "MA"
}
{
  "People": ["Bryan", "John"],
  "State": "MA",
  "City": "Boston"
}
{
  "People": ["John", "Bryan", "Carla"],
  "City": "Boston",
  "State": "MA"
}

C:

{
  "People": ["Bryan", "John"],
  "State": "MA",
  "City": "Boston"
}

那就是:

$ some_diff_command A.json B.json

$ some_diff_command A.json C.json
The files are not structurally identical

共有1个答案

葛晔
2023-03-14

如果您的shell支持进程替换(下面是bash样式,请参见文档):

diff <(jq --sort-keys . A.json) <(jq --sort-keys . B.json)

对象的键顺序将被忽略,但数组顺序仍然重要。如果需要的话,可以通过其他方式对数组值进行排序,或者使它们像集合一样(例如[“foo”,“bar”]{“foo”:null,“bar”:null};这还可以删除重复项)。

或者,根据您的需要,将diff替换为其他一些比较器,例如cmpcolordiffvimdiff。如果您只想要一个是或否的答案,请考虑使用cmp并将--compact-output传递给jq,以避免对输出进行格式化,以获得潜在的少量性能提升。

 类似资料:
  • 问题内容: 是否有任何命令行实用程序可用于查找两个JSON文件是否相同,且字典内键和列表内元素顺序不变? 可以使用其他等效工具完成此操作吗? 例子: 这两个JSON文件是相同的 : : 但是这两个JSON文件是不同的: : : 那将是: 问题答案: 由于jq的比较已经在不考虑键顺序的情况下比较了对象,因此剩下的就是在比较对象之前对对象中的所有列表进行排序。假设您的两个文件在每晚的最新jq上分别命名

  • 简介 我们基于Python SDK实现了命令行工具cloudml,可以方便使用访问Xiaomi Cloud-ML服务。 由于sdk的接口更新较快,命令的使用方式可以通过-h选项获取最新的使用方法。 初始化配置文件 cloudml init 查看帮助 cloudml -h TrainJob相关命令 列举训练job cloudml jobs list 提交训练job cloudml jobs s

  • 工欲善其事,必先利其器。学好SQLite的命令行工具,对于我们学习SQLite本身而言是非常非常有帮助的。最基本的一条就是,它让我们学习SQLite的过程更加轻松愉快。言归正传吧,在SQLite的官方下载网站,提供了支持多个平台的命令行工具,使用该工具我们可以完成大多数常用的SQLite操作,就像sqlplus之于Oracle。以下列表给出了该工具的内置命令: 命令名 命令说明 .help 列出所

  • 命令行工具 meteor help 获取 meteor 命令行使用帮助。运行 meteor help 会列出meteor所有命令。运行meteor help &lt;command&gt;会打印出关于meteor &lt;command&gt;的详细帮助。 meteor create &lt;name&gt; 创建一个名为&lt;name&gt;的子目录,并在里面新建一个Meteor应用。 met

  • web3j的完全jar文件分发包对每一次发布都提供命令行工具。命令行允许你从终端(terminal)使用web3j的一些功能: 这些工具提供: 钱包创建 钱包密码管理 从一个钱包转移到另一个钱包以太币 solidity智能合约封装包的产生 命令行工具可以从github项目存储库的releases页面下载zipfile/tarball包,或者通过源代码自己编译获得;OS X用户也可以通过Homebr

  • 命令行工具 web3j的jar包为每一个版本都提供命令行工具。命令行工具允许你直接通过一些命令使用web3j的一些功能: 钱包创建 钱包密码管理 资金从钱包转移到另一个 solidity编写的智能合同功能打包 请参阅文档以获得命令行相关的进一步的信息。