天天看點

Python比較2個json資料是否相等

1、json資料轉換成字典

dict1 = json.load(load_f1)
dict2 = json.load(load_f2)      

2、将兩個字典按key排好序,然後使用zip()函數将兩個字典對應的key打包成元組。比較對應的key的value是否相等。

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

zip() 函數用于将可疊代的對象作為參數,将對象中對應的元素打包成一個個元組。

Python比較2個json資料是否相等
Python比較2個json資料是否相等

如果資料格式為:

dict1 = {"id": "100", "name": "蘋果", "info": {"uid":"2020","phoneName":["一代","蘋果12"]}}
dict2 = {"id": "100", "name": "華為", "info": {"uid":"2020","phoneName":["一代","Mate40"]}}      

使用遞歸函數進行處理

def cmp(src_data, dst_data):
    if isinstance(src_data, dict):
        """若為dict格式"""
        for key in dst_data:
            if key not in src_data:
                print("src不存在這個key")
        for key in src_data:
            if key in dst_data:
                """遞歸"""
                cmp(src_data[key], dst_data[key])
            else:
                print("dst不存在這個key")
    elif isinstance(src_data, list):
        """若為list格式"""
        if len(src_data) != len(dst_data):
            print("list len: '{}' != '{}'".format(len(src_data), len(dst_data)))
        for src_list, dst_list in zip(sorted(src_data), sorted(dst_data)):
            """遞歸"""
            cmp(src_list, dst_list)
    else:
        if str(src_data) != str(dst_data):
            print(src_data)

dict1 = {"id": "100", "name": "蘋果", "info": {"uid": "2020", "phoneName": ["一代", "蘋果12"]}}
dict2 = {"id": "100", "name": "華為", "info": {"uid": "2020", "phoneName": ["一代", "Mate40"]}}
cmp(dict1, dict2)