如何用Shell脚本的Jq工具对比两个JSON文件输出不匹配对象
基于JQ实现两个JSON数组取差集的Shell方案
全字段完全匹配方案(符合示例需求)
如果需要两个对象所有键值对完全一致才判定为匹配,直接用JQ原生数组减法即可,命令如下:
jq --slurpfile f1 file1.json '. - $f1' file2.json
执行后直接输出目标结果,要保存到文件的话添加输出重定向即可:
jq --slurpfile f1 file1.json '. - $f1' file2.json > output.json
对应你的示例输入,输出结果为:
[ { "name": "GHI", "age": "24", "address": "pqr" } ]
指定字段匹配方案
如果不需要全字段匹配,仅需要判断个别关键字段(例如仅匹配name字段)是否相同,使用如下命令:
# 仅按name字段匹配,筛选file2中name不在file1里的对象 jq --slurpfile f1 file1.json '[.[] | select(.name as $n | $f1 | map(.name) | IN($n[]) | not)]' file2.json
你可以自行修改命令中的name字段,替换为实际需要匹配的业务字段。
内容的提问来源于stack exchange,提问作者kk07
相关产品推荐
相关产品推荐

