python - 比较 2 个 Json 文件并显示第二个文件的差异
问题描述
这是我有 JSON1.json 的两个 json 文件
{
"name": "HOSTNAME1",
"chef_environment": "non_prod",
"run_list": [
"role[MyOrg-non_prod]",
"role[rhel7-latest]",
"role[middleware-nonprod-all]",
"role[MyApp-middleware_corebase_prod]",
"role[MyApp_envs-test]",
"role[MyApp_envs-dev]",
"role[MyApp_nfs_mount]",
"role[MyApp_access-dev]",
"role[MyOrg-client-wrapper]"
]
}
JSON2.json
{
"name": "HOSTNAME2",
"chef_environment": "non_prod",
"run_list": [
"role[MyOrg-non_prod]",
"role[rhel7-latest]",
"role[MyApp_unix_app-dev]",
"role[MyApp_middleware_corebase_prod]"
]
}
这些文件可能会或可能不会被排序。我需要获取 JSON1 中不可用的 JSON2 的唯一值
我最初尝试过使用类似的命令
findstr /vig:JSON1.json JSON2.json | grep -v name| grep -e MyApp -e MyOrg | tr -d '\n'| sed -e 's:"::g' -e 's: *::g' -e 's:,$::'
但是,这种方法有效,例如考虑在 JSON1 中我有一个条目“role [MyApp_middleware_corebase_prod]”,
并在 JSON2“角色 [MyApp_middleware_corebase_prod]”
请注意逗号的区别,虽然条目是相同的,因此不是唯一的,但是由于逗号的存在,这被认为是唯一的,并且给了我不想要的输出。
如果我比较 JSON1 与 JSON2 预期的输出是 角色 [MyApp_unix_app-dev] 因为这只是 JSON2 独有的
如果我比较 JSON2 和 JSON1
角色[MyApp_envs-test],角色[MyApp_envs-dev],角色[MyApp_nfs_mount],角色[MyApp_access-dev],角色[MyOrg-client-wrapper]
解决方案
集减法(差异)是我认为你真正想要的:
import json
with open('json1.json', 'r') as f:
json1 = json.load(f)
with open('json2.json', 'r') as f:
json2 = json.load(f)
json2['run_list'] = list(set(json2['run_list']) - set(json1['run_list']))
print(json.dumps(json2, indent=2))
输出:
{
"name": "HOSTNAME2",
"chef_environment": "non_prod",
"run_list": [
"role[MyApp_unix_app-dev]"
]
}
推荐阅读
- tcl - 如何将 sleep 命令放在 tcl 脚本中?
- docker - 当我用 ansible 更新 pod B 时,在 Kuebrentes pod A 中自动执行脚本
- sql - 动态 SQL 备份数据库并根据日期复制到不同位置
- android - Gitlab-ci 阶段未完成构建失败
- android - 如何将 Kotlin 流拆分为 2 个流?
- c# - 为什么 1 000 000 不等于 1000000.toString("N", new CultureInfo("fr-FR"))
- c - 为什么c不替换*b?
- node.js - 如何使用 Knex.js 为连接池中的每个连接定义默认设置
- html - 将 HTAccess 规则合二为一
- jmeter - 没有计时器的 JMeter 请求延迟