python - 比较两个文件中同名但值不同的两个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 中不存在的输出。
任何解决方案都会非常有用。
提前致谢 :)
解决方案
假设每个文件都包含一个对象流,那么下面的简单jq程序就可以解决问题。
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 ...
推荐阅读
- r - 从 R 中的 URL 下载压缩文件
- coq - 将证明从 Nat 翻译为 Rat
- r - 使用 R 包进行日期转换
- asp.net - 如何获取为页面控件生成的唯一 ID 前缀
- node.js - 即使设置了自定义 usernameField,Passport.js 也会使用本地身份验证策略引发“缺少凭据”错误
- c - 当 inet_pton 失败但 getaddrinfo 成功时?
- python-3.x - Discord.py - Asyncio 超时无法正常工作
- php - PHP preg_replace 多行指南
- maven - 使用 maven javafx 嵌入 derby db 的 jpa
- php - PHP 创建函数回文