微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较两个JSON文件并更新修改

如何解决比较两个JSON文件并更新修改

我正在处理一个需求,其中我必须比较两个json文件(master.json和delta.json,如果主对象中的对象内的任何key:value对有任何更改,则更新对象.json文件

例如:

        **master.json**
       
        {
         [
           {
             host: abc
             IP  : 10.10.11.1
           }
           {
             host: def
             IP: 10.10.11.2
           }
          ]
         }

         **delta.json**
         {
          [ 
            {
             host: abc
             IP: 10.12.12.2
           }
          ]
         }

就像在delta.json中更改的主机IP地址示例中一样。此更新必须移至master.json

生成的master.json应该是

       **master.json**
       
        {
         [
           {
             host: abc
             IP  : 10.12.12.2
           }
           {
             host: def
             IP: 10.10.11.2
           }
          ]
         }

解决方法

使用JSON模块,我们可以从文件中解析json。 要用master更新delta,可以使用递归函数。

import json

master = json.loads(open("master.json",'r',encoding='utf-8').read())
delta = json.loads(open("delta.json",encoding='utf-8').read())

def iterate_paralell(delta,master):
    for k,v in delta.items():

        # if it's another dict or list run recursively
        if isinstance(v,dict): iterate_paralell(v,master[k])
        elif isinstance(v,list):
            for i in range(len(v)): iterate_paralell(v[i],master[k][i])
        
        # update the maste with delta value
        else:        
            master[k] = v

iterate_paralell(delta,master)

该函数遍历delta对象,并在master到达“叶子”时通过将其作为参数传递来更新。{p>

master.json

{
    "connections": [
        {
            "host": "abc","IP": "10.10.11.1"
        },{
            "host": "def","IP": "10.10.11.2"
        }
    ]
}

delta.json

{
    "connections": [
        {
            "host": "abc","IP": "10.12.12.2"
        }
    ]
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。