IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python实现json diff -> 正文阅读

[Python知识库]python实现json diff

第一种方法:借助于Python包

安装json_tools包,示例代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json_tools


def jsonDiff(a, b):
    result = json_tools.diff(a, b)
    print(result)

if __name__ == '__main__':
    a = {
        "id": 1,
        "name": "aaaa",
        "list": [1, 0, 2, 3],
        "list_json:": [
            {"id": 2,
             "str": "aaaa2",
             "list": [0, 1, 2, 3], },
            {
                "id": 1,
                "str": "aaaa",
                "list": [0, 1, 2],
            }
        ],
        "json": {
            "aaa": 5
        },
        "str_json": "{\"aaa\":\"23\",\"int\":34}"}
    b = {
        "id": 1,
        "name": "aaaa1",
        "list": [0, 1, 2],
        "list_json:": [
            {
                "id": 1,
                "str": "aaaa",
                "list": [0, 1, 2],
            },
            {"id": 2,
             "str": "aaaa",
             "list": [0, 1, 2, 3], }
        ],
        "json": {
            "aaa": 5
        },
        "str_json": "{\"aaa\":\"23\",\"int\":34}"}
    jsonDiff(a, b)
    # cmp(a, b)

输出结果:

[
{'replace': '/name', 'value': 'aaaa1', 'prev': 'aaaa'}, 
{'remove': '/list/3', 'prev': 3, 'details': 'array-item'}, 
{'replace': '/list/0', 'value': 0, 'prev': 1}, 
{'replace': '/list/1', 'value': 1, 'prev': 0}, 
{'replace': '/list_json:/0/id', 'value': 1, 'prev': 2}, 
{'replace': '/list_json:/0/str', 'value': 'aaaa', 'prev': 'aaaa2'}, 
{'remove': '/list_json:/0/list/3', 'prev': 3, 'details': 'array-item'},
{'replace': '/list_json:/1/id', 'value': 2, 'prev': 1}, 
{'add': '/list_json:/1/list/3', 'value': 3, 'details': 'array-item'}
 ]

第二种方法:自己写一个递归

该方法的优点是:可以自己定制化
比如:

  • 针对list类型,可以排序后对比,如果list内是json的,可以根据某个字段排序后对比
  • 还可以指定忽略字段,不进行对比
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def cmp(src_data, dst_data):
    for key in src_data:
        if key not in dst_data.keys():
            print("scr 不存在该key:", key)
        if isinstance(src_data[key], dict):
            thiskey = key
            cmp(src_data[thiskey], dst_data[thiskey])
        elif isinstance(src_data[key], list):
            if (len(src_data[key]) != len(dst_data[key])):
                print("长度不相等")
            # list中可能嵌套json,内部json排序
            if isinstance(src_data[key][0], dict):
                src_json_arr = src_data[key]
                dst_json_arr = dst_data[key]
                src_json_arr.sort(key=lambda x: x["id"])
                dst_json_arr.sort(key=lambda x: x["id"])
                for i in range(len(src_data[key])):
                    cmp(src_json_arr[i], dst_json_arr[i])
            else:
                if sorted(src_data[key]) != sorted(src_data[key]):
                    print("key:", key, src_data, dst_data)
        else:
            if src_data[key] != dst_data[key]:
                print("key:", key, "src_value:", src_data[key], "dst_value:", dst_data[key])


if __name__ == '__main__':
    a = {
        "id": 1,
        "name": "aaaa",
        "list": [1, 0, 2, 3],
        "list_json:": [
            {"id": 2,
             "str": "aaaa2",
             "list": [0, 1, 2, 3], },
            {
                "id": 1,
                "str": "aaaa",
                "list": [0, 1, 2],
            }
        ],
        "json": {
            "aaa": 5
        },
        "str_json": "{\"aaa\":\"23\",\"int\":34}"}
    b = {
        "id": 1,
        "name": "aaaa1",
        "list": [0, 1, 2],
        "list_json:": [
            {
                "id": 1,
                "str": "aaaa",
                "list": [0, 1, 2],
            },
            {"id": 2,
             "str": "aaaa",
             "list": [0, 1, 2, 3], }
        ],
        "json": {
            "aaa": 5
        },
        "str_json": "{\"aaa\":\"23\",\"int\":34}"}
    cmp(a, b)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:17:56  更:2021-11-22 12:19:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:20:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码