比较两个json文件:shell脚本

gku*_*ar7 5 shell json

我想比较两个如下所示的json文件:

[
   {
      "type" : 1,
      "children" : {
         "nsubj" : {
            "role" : "topic",
            "POS" : [
               "noun"
            ]
         }
      },
      "role" : "vehicle",
      "POS" : [
         "noun"
      ]
   },
Run Code Online (Sandbox Code Playgroud)

另一个格式相似,但是两者之间有些区别,因为一个json文件由3336行组成,而另一个json文件由3724行组成。我想编写一个shell脚本,逐行比较这两个脚本,并且每当发现差异时,输出发生差异的行号。

小智 11

要比较json文件,您应该将它们转换为具有相同顺序的键。jqhttps://stedolan.github.io/jq/)是这项工作的很好工具,您可以在其中执行以下操作:

jq -S . fileA.json > fileA_fmt.json
jq -S . fileB.json > fileB_fmt.json
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用自己喜欢的工具进行文本文件比较。在纯命令行中,我喜欢kdiff3用于GUI或仅使用diff,例如:

diff fileA_fmt.json fileB_fmt.json
Run Code Online (Sandbox Code Playgroud)

  • 确实是非常好的工具。只需 `brew install jq` 即可在 MacOS 上安装它 (2认同)

Ser*_*nko 7

只需使用diff。像

diff --unified file1.json file2.json
Run Code Online (Sandbox Code Playgroud)


小智 7

只是为了更新 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)
Run Code Online (Sandbox Code Playgroud)