如何解决比较两个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 举报,一经查实,本站将立刻删除。