首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用python比较两个json并返回不匹配的对象

如何使用python比较两个json并返回不匹配的对象
EN

Stack Overflow用户
提问于 2020-05-06 17:14:52
回答 1查看 46关注 0票数 0

以下是示例输入json文件:

json1:

代码语言:javascript
运行
复制
[
  {
    "App_Name": "hospital",
    "Instances": 1,
    "Memory": 256,
    "Disk_Quota": 1024
  },
  {
    "App_Name": "ecommerce",
    "Instances": 10,
    "Memory": 2048,
    "Disk_Quota": 1024
  },
  {
    "App_Name": "airlines",
    "Instances": 3,
    "Memory": 1024,
    "Disk_Quota": 1024
  }]

json2:

代码语言:javascript
运行
复制
[
  {
    "App_Name": "bus",
    "Instances": 1,
    "Memory": 256,
    "Disk_Quota": 1024
  },
  {
    "App_Name": "hospital",
    "Instances": 10,
    "Memory": 2048,
    "Disk_Quota": 1024
  },
  {
    "App_Name": "govt",
    "Instances": 3,
    "Memory": 1024,
    "Disk_Quota": 1024
  }]

我需要比较两个JSON文件,并需要将所有不匹配的应用程序名称对象返回到单独的变量中,例如

代码语言:javascript
运行
复制
expected output: ================== 
unmatched objects in file = [{"App_Name": "ecommerce","Instances": 10,"Memory": 2048,"Disk_Quota": 1024},{"App_Name": "airlines","Instances": 3,"Memory": 1024,"Disk_Quota": 1024 }] 
unmatched objects in file2 = [{"App_Name": "bus","Instances": 1,"Memory": 256,"Disk_Quota": 1024},{"App_Name": "govt","Instances": 3,"Memory": 1024,"Disk_Quota": 1024}
EN

回答 1

Stack Overflow用户

发布于 2020-05-06 17:26:32

使用json.load将每个文件反序列化为字典列表,将字典列表重新构造为以App_Name为键的嵌套字典。然后,只需使用列表理解检查其他字典中是否存在这些键,并将其过滤掉。

代码语言:javascript
运行
复制
from json import load

with open("json1.json") as json1, open("json2.json") as json2:
    json1dict = {d["App_Name"]: d for d in load(json1)}
    json2dict = {d["App_Name"]: d for d in load(json2)}

    unmatched1 = [v for k, v in json1dict.items() if k not in json2dict]
    print(unmatched1)

    unmatched2 = [v for k, v in json2dict.items() if k not in json1dict]
    print(unmatched2)

输出:

代码语言:javascript
运行
复制
[{'App_Name': 'ecommerce', 'Instances': 10, 'Memory': 2048, 'Disk_Quota': 1024}, {'App_Name': 'airlines', 'Instances': 3, 'Memory': 1024, 'Disk_Quota': 1024}]
[{'App_Name': 'bus', 'Instances': 1, 'Memory': 256, 'Disk_Quota': 1024}, {'App_Name': 'govt', 'Instances': 3, 'Memory': 1024, 'Disk_Quota': 1024}]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61631529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档