Python中如何对比两个JSON格式文件的内容?

比如我扫描端口上一次扫到 80,这次没有扫描到,怎么对比 json 文件从而找出区别点


Python中如何对比两个JSON格式文件的内容?
5 回复

不限制 python ?diff file1 fies2 这样可以吗?


直接上代码。用 json.load() 读文件,然后对比两个加载后的Python对象就行。最简单的是直接用 == 操作符。

import json

def compare_json_files(file1_path, file2_path):
    """
    比较两个JSON文件的内容是否完全相同。
    
    参数:
        file1_path (str): 第一个JSON文件的路径
        file2_path (str): 第二个JSON文件的路径
    
    返回:
        bool: 如果内容完全相同返回True,否则返回False
    """
    try:
        # 读取并解析第一个JSON文件
        with open(file1_path, 'r', encoding='utf-8') as f1:
            data1 = json.load(f1)
        
        # 读取并解析第二个JSON文件
        with open(file2_path, 'r', encoding='utf-8') as f2:
            data2 = json.load(f2)
        
        # 直接比较两个Python对象
        return data1 == data2
        
    except FileNotFoundError as e:
        print(f"文件未找到: {e}")
        return False
    except json.JSONDecodeError as e:
        print(f"JSON解析错误: {e}")
        return False
    except Exception as e:
        print(f"发生错误: {e}")
        return False

# 使用示例
if __name__ == "__main__":
    result = compare_json_files('file1.json', 'file2.json')
    if result:
        print("两个JSON文件内容完全相同")
    else:
        print("两个JSON文件内容不同")

关键点:

  1. json.load() 把JSON字符串转成Python字典/列表。
  2. 直接用 == 比较两个对象,Python会自动递归比较所有元素。
  3. 加了异常处理,文件找不到或者JSON格式错了能知道。

如果想看具体哪里不同,可以用 difflib 或者把对象转成字符串再对比:

import json
from difflib import unified_diff

def detailed_json_diff(file1_path, file2_path):
    """显示两个JSON文件的具体差异"""
    with open(file1_path, 'r') as f1, open(file2_path, 'r') as f2:
        # 按行读取,方便显示行级差异
        lines1 = f1.readlines()
        lines2 = f2.readlines()
        
        # 使用unified_diff生成差异报告
        diff = unified_diff(lines1, lines2, 
                          fromfile=file1_path, 
                          tofile=file2_path)
        
        diff_output = list(diff)
        if diff_output:
            print("发现差异:")
            for line in diff_output:
                print(line.rstrip())
        else:
            print("文件内容完全相同")

一句话总结:用 json.load() 读进来,然后 == 比较最直接。

把 json 转成 python 的 dict

可以之间用 diff

回到顶部