python json字符串的比较

为什么写这个

在现实的开发过程中,经常出现如下的实际情况: 如运维过程中。
ali云的资源经常变化,本地cmdb资源也要随着变化。如何才能保证线上和cmdb数据库中数据一致呢, 这个时候就需要进行 定时同步线上资源列表。

如新增了一台机器。

将线上资源整理成json字符串dist_data, mysql数据库中的资源列表整理成source_data, 将source_data和dist_data进行比较,看资源发生了什么变化。

代码实现

# -*- coding: utf-8 -*-

# 简单比较
dict1 = {"id": "123", "name": "班级优化", "test":"testvalue"}
dict2 = {"id": "123", "name": "班级优化2", "zzz": "bbbb"}

for src, dest in zip(sorted(dict1),sorted(dict2)):
    if str(dict1[src]) != str(dict2[dest]):
        print(src, dict1[src], dict2[dest])


print("#"*50)

# 递归复制比较
dict3 = {"id": "503", "name": "班级优化", "info": {"uid":"2017","stuName":["张三","李四"]}, "teacher": "lilaoshi"}
dict4 = {"id": "503", "test": "AAAAA", "name": "班级优化2", "info": {"uid":"2017","stuName":["张三","赵五", "王麻子"]}, "student": "zhangsan"}

def cmp(src_data, dest_data):
    if isinstance(src_data, dict):
        for key in dest_data:
            if key not in src_data:
                print("src key is not exist: " + key)
        for key in src_data:
            if key in dest_data:
                cmp(src_data[key], dest_data[key])
    elif isinstance(src_data, list):
        if len(src_data) != len(dest_data):
            print("sub list value is not same")
        for src_list , dest_list in zip(sorted(src_data), sorted(dest_data)):
            cmp(src_list, dest_list)
    else:
        if str(src_data) != str(dest_data):
            print("src value is not exist: " + src_data)

cmp(dict4,dict3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值