You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DeepDiff输出转为类GitHub风格的终端可读JSON差异

类GitHub风格的DeepDiff终端差异展示

需求说明

DeepDiff默认输出格式仅适合小型人工审核:

{'dictionary_item_added': [root[5], root[6]], 'dictionary_item_removed': [root[4]]}

我们需要在支持ANSI颜色的终端中,以-/+行展示JSON结构差异,并高亮变更内容。

放弃使用git-diff的原因:JSON不关心格式和键顺序,用git-diff需要先排序字典、写入磁盘再调用外部命令,操作繁琐;直接调用DeepDiff(t1, t2)的方式更简洁。

示例基础代码:

from deepdiff import DeepDiff
t1 = {1:1, 3:3, 4:4}
t2 = {1:1, 3:3, 5:5, 6:6}
ddiff = DeepDiff(t1, t2)
print(ddiff)

Python实现方案

以下代码将DeepDiff结果转换成类GitHub的差异格式,支持终端颜色高亮:

from deepdiff import DeepDiff

# ANSI颜色码定义
RED = "\033[91m"
GREEN = "\033[92m"
RESET = "\033[0m"

def format_deepdiff(t1, t2):
    ddiff = DeepDiff(t1, t2)
    output = []
    
    # 处理被移除的项
    if 'dictionary_item_removed' in ddiff:
        for item in ddiff['dictionary_item_removed']:
            key = item.split('[')[1].split(']')[0]
            value = t1[int(key)]
            output.append(f"{RED}- {key}: {value}{RESET}")
    
    # 处理新增的项
    if 'dictionary_item_added' in ddiff:
        for item in ddiff['dictionary_item_added']:
            key = item.split('[')[1].split(']')[0]
            value = t2[int(key)]
            output.append(f"{GREEN}+ {key}: {value}{RESET}")
    
    # 处理值变更的项
    if 'values_changed' in ddiff:
        for path, change in ddiff['values_changed'].items():
            key = path.split('[')[1].split(']')[0]
            old_val = change['old_value']
            new_val = change['new_value']
            output.append(f"{RED}- {key}: {old_val}{RESET}")
            output.append(f"{GREEN}+ {key}: {new_val}{RESET}")
    
    return '\n'.join(output)

# 测试示例
if __name__ == "__main__":
    t1 = {1:1, 3:3, 4:4}
    t2 = {1:1, 3:5, 5:5, 6:6}
    print(format_deepdiff(t1, t2))

代码说明

  • 用ANSI转义码实现终端颜色区分:红色标记移除项,绿色标记新增/变更后的项,最后重置颜色
  • 解析DeepDiff返回的路径字符串(如root[4])提取字典键
  • 分别处理dictionary_item_removed、dictionary_item_added、values_changed三种差异类型,生成对应-/+行
  • 支持字典值变更的高亮展示,同时显示旧值和新值

运行上述代码后,终端会输出带颜色的差异行,效果类似GitHub PR中的代码对比。

内容的提问来源于stack exchange,提问作者Aleksandr Levchuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:01:07