首页 > 解决方案 > 比较两个文件中同名但值不同的两个json文件

问题描述

我有两个 json 文件,内容如下:

文件1:

    {
      "name": "SES_ENABLED",
      "value": "true"
    },
    {  
        "name":"SES_ADDRESS",
        "value":"email-xxxxxx.aws.com"    
    },
    {  
        "name":"SES_FROM_EMAIL",
        "value":"abc@gmail.com"  
    },
    {  
        "name":"SES_TO_EMAIL",
        "value":"123@gmail.com"  
    }

文件 2:

   {
      "name": "SES_ENABLED",
      "value": "false"
    },

    {  
        "name":"SES_FROM_EMAIL",
        "value":"xyz@gmail.com"  
    },
    {  
        "name":"SES_ADDRESS",
        "value":"emails-xyzyzyz.aws.com"    
    }

在上述两个文件中,名称变量将相同但值不同且顺序不同,并且文件 1 中还有一个额外的字段

IE

{
   "name": "SES_TO_EMAIL"
   "value": "123@gmail.com"
}

从file1我如何比较file2中常见的“名称”变量,以及如果file2中缺少任何字段而不是file1,我怎么能得到它。

例如:

在将 file1 与 file2 进行比较后,我需要得到"name": "SES_TO_EMAIL"file2 中不存在的输出。

任何解决方案都会非常有用。

提前致谢 :)

标签: pythonjsonshellcompare

解决方案


假设每个文件都包含一个对象流,那么下面的简单程序就可以解决问题。

reduce inputs.name as $name ({}; .[input_filename] += [$name])
| (keys_unsorted | combinations(2)) as $pair
| (.[$pair[0]] - .[$pair[1]])[]
| "name: \(.) is not present in \($pair[1])"

调用:

jq -rnf prog.jq file1 file2 file3 ...

推荐阅读