比较两个json文件:shell脚本
我想比较两个json文件,如下所示:比较两个json文件:shell脚本,json,shell,diff,jq,Json,Shell,Diff,Jq,我想比较两个json文件,如下所示: [ { "type" : 1, "children" : { "nsubj" : { "role" : "topic", "POS" : [ "noun" ] } }, "role" : "vehicle", "POS" : [ "noun
[
{
"type" : 1,
"children" : {
"nsubj" : {
"role" : "topic",
"POS" : [
"noun"
]
}
},
"role" : "vehicle",
"POS" : [
"noun"
]
},
另一个是类似的格式,但两者之间存在一些差异,因为一个json文件由3336行组成,而另一个由3724行组成。我想写一个shell脚本,逐行比较这两个脚本,每当它发现差异时,输出出现差异的行号 只需像中一样使用diff
diff --unified file1.json file2.json
要比较json文件,您应该转换它们,使它们具有相同的键顺序。这项工作的一个非常好的工具是jq(),您可以在其中执行以下操作:
jq -S . fileA.json > fileA_fmt.json
jq -S . fileB.json > fileB_fmt.json
然后,您可以使用您喜爱的工具进行文本文件比较。我喜欢用于GUI的kdiff3或纯命令行中的纯diff,例如:
diff fileA_fmt.json fileB_fmt.json
只是为了更新bartolomeon_n的答案,你实际上可以在一行上完成这一切
diff <(jq -S . fileA.json) <(jq -S . fileB.json)
# or, with nice columns and colours:
diff -y --left-column --color <(jq -S . fileA.json) <(jq -S . fileB.json)
diff是的,我已经试过了,但我不太确定标题的含义是什么@@12841+12721@@例如,如果不使用“统一”标志,则会看到类似“9c9”的内容。这意味着第9行已经更改。您能解释一下统一标志的符号吗,基本上是说第1行到2841行需要更改吗?类似地,第二个json文件中的第1行到2721行也需要更改,这确实是一个非常好的工具。只需brew install jq
就可以在macoso上安装它。需要注意的一点是,输出必须使用不同的文件。我试图在同一个文件上写,结果留下了一个空文件。太好了!还消除了创建(和清理)临时文件的需要。