9

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

[
   {
      "type" : 1,
      "children" : {
         "nsubj" : {
            "role" : "topic",
            "POS" : [
               "noun"
            ]
         }
      },
      "role" : "vehicle",
      "POS" : [
         "noun"
      ]
   },

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

4

3 回答 3

20

要比较 json 文件,您应该转换它们,使它们具有相同的键顺序。这项工作的非常好的工具是jq ( https://stedolan.github.io/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
于 2017-05-08T22:42:26.890 回答
15

只需使用差异。像

diff --unified file1.json file2.json
于 2013-12-31T01:24:28.477 回答
5

只是为了更新 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)
于 2020-11-22T01:19:33.343 回答