在使用常见的第三方库(deepdiff、json_tools、jsonpatch)获取两个json对象的差异后,如何根据差异,对json对象进行修改。如何从对比结果中获取数据的key是问题的关键。

  deepdiff举例:

from deepdiff import DeepDiffa = {"name": "yanan", "pro": {"sh": "shandong", "city": ["zibo", "weifang"]}}
b = {"name": "Yanan", "pro": {"sh": "shandong", "town": ["taian", "weifang"]}}result = DeepDiff(a, b)print(result)
{'dictionary_item_added': [root['pro']['town']], 'dictionary_item_removed': [root['pro']['city']], 'values_changed': {"root['name']": {'new_value': 'Yanan', 'old_value': 'yanan'}}}
  • 增加了一个item对象:b['pro']['town']
  • 移除了一个item对象:a['pro']['city']
  • 数据发生改变的有:a['name'] 变为 b['name']

deepdiff库中,可以

  1. 使用_path_to_elements方法实现将root['name']转换为(('name', 'GET'),)

    deepdiff.path._path_to_elements("root['name']", root_element=None)
    
  2. 然后使_get_nested_obj用获取原对象中对应的数据。
    deepdiff.path._get_nested_obj(b,(('name', 'GET'),))
    

在我的使用场景中,只关心对象的类型、数据是否发生改变,其他item对象的增加、删除并不关心。所以最终的实现的代码如下,大家可以根据自己的具体应用场景进行修改:

from deepdiff import DeepDiff
from deepdiff.path import _path_to_elements, _get_nested_objdef update_json(new_json, old_json=None):# 更新 json 文件if not old_json:return new_jsondiff_obj = DeepDiff(old_json, new_json, verbose_level=2)if diff_obj.get('type_changes'):for _path, item in diff_obj['type_changes'].items():if (isinstance(item['new_value'], list) or isinstance(item['new_value'], dict) \or isinstance(item['new_value'], str)) and len(item['new_value']) == 0:continuecur_node = _path_to_elements(_path, root_element=None)parent_node = _get_nested_obj(old_json, cur_node[:-1])parent_node[cur_node[-1][0]] = item['new_value']if diff_obj.get('values_changed'):for _path, item in diff_obj['values_changed'].items():cur_node = _path_to_elements(_path, root_element=None)parent_node = _get_nested_obj(old_json, cur_node[:-1])parent_node[cur_node[-1][0]] = item['new_value']return old_json

python json对比差异,更新json数据相关推荐

  1. Python实现对比两个Excel数据内容并标出不同

    导读 日常工作中需要对比两个Excel工作表中的数据差异是很不方便的,使用python来做就比较简单了!本文为大家介绍了python实现对比两个Excel的数据内容并标记出不同数据的示例代码,需要的可 ...

  2. 在线JSON在线对比差异工具

    在线JSON在线对比差异工具 在线JSON在线对比差异工具 JSON在线对比差异工具,JSON在线对比差异工具,JSON在线对比差异工具 https://tooltt.com/json-diff/

  3. 新旧版本表格数据对比差异流程

    1.数据合并:将旧版本的数据和新版本的数据放置到同一个表格中. 2.通过vlookup(需要查找的数据,查找数据的范围,查找范围中需要的部分的列序号,false 精确查询 true 模糊查询)  两表 ...

  4. 调用python脚本并传递参数json格式_使用 Python 处理 JSON 格式的数据

    如果你不希望从头开始创造一种数据格式来存放数据,JSON 是一个很好的选择.如果你对 Python 有所了解,就更加事半功倍了.下面就来介绍一下如何使用 Python 处理 JSON 数据. JSON ...

  5. Python文本处理:解析json格式的数据

    json 模块提供了一种很简单的方式来编码和解码JSON 数据. 字符串操作 其中两个主要的函数是json.dumps() 和json.loads() ,要比其他序列化函数库如pickle 的接口少得 ...

  6. 以Python为基础的REST(JSON为交换数据)接口的测试框架设计(一)

    在Webservice的接口测试中,经常使用JSON作为数据交换格式,平时在工作中使用RestClient工具进行测试,功能比较简单,只能进行单个功能的测试,无法进行复杂行为的测试. 故想用Pytho ...

  7. python json操作_Python读取JSON数据操作实例解析

    读写 JSON 数据 问题 你想读写 JSON(JavaScript Object Notation) 编码格式的数据. 解决方案 json模块提供给了一种很简单的方式来编码和解码json数据,其中两 ...

  8. python 读取json转为docx_python 将json数据提取转化为txt的方法

    python3 如何把一个txt文件转换成json数据,txt包含前言 今天拿到一个传感器信号文件,txt格式,有十几行,每行是一组json格式数据,有两个字段(键):'series'和'id',共4 ...

  9. 以下用于数据存储领域的python第三方库是-python第三方库系列之一--json

    认真生活每一天,认真敲好每一行代码,为了未来的小公主,好好学习,天天向上~ 一.先讲讲json的出现,就要先讲讲序列化 1. 序列化(Serialization):将对象的状态信息转换为可以存储或可以 ...

  10. 29-30Python多线程、多线程、使用threading模块创建线程;JSON数据解析、编码为JSON类型转换对应表、Python类型转换对应表、json.dumps与json.loads

    29Python3多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些 ...

最新文章

  1. gdiplus判断一个点是否在圆弧线上_上挑眼型会更显老吗?杨丞琳和张雨绮示范了2条不同路线...
  2. java properties 属性,java 读取 properties 属性资料
  3. python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...
  4. 电脑会显示android,怎么在电脑上显示、操作安卓手机
  5. “iQOO”怎么读?vivo官宣“发音”视频
  6. java application_applet_Java程序可以分为JavaApplication和JavaApplet两类。()
  7. word-wrap、word-break、white-space
  8. mybatis 实现批量更新
  9. Power of Four(Leetcode 342)
  10. 对抗搜索(Adversarial Games)——Min-max搜索 Aleph-beta剪枝搜索
  11. Cocos2dx-lua组件tableView的简单用法
  12. JAVA实现大华摄像头WEB方式实时显示视频,H5界面展示方式思路
  13. unity 监听文件夹更新,获取本地图片并显示
  14. 计算机底层:进程与线程。
  15. 人工蜂群算法python_python如何实现人工蜂群算法 python实现人工蜂群算法代码示例...
  16. Driller源码阅读笔记(二)
  17. DSC测试仪器校正及检验
  18. 初学者怎么学习Java
  19. Eclipse使用入门指南及技巧
  20. java 判断日期是同一天_java判断两个日期是否同一天的方法

热门文章

  1. EEGLAB 脑电数据处理与分析
  2. 浙大pat | 浙大pat乙级 1001~1004
  3. 有关sim800l的资料
  4. 删除重复节点(细节每太明白)
  5. 地铁应急指挥系统解决方案
  6. js控件封装之tree
  7. python3 gzip解压_使用 Python 解压缩 gzip 数据流
  8. RFID全面梳理(超高频)
  9. java 数组求极值题目_数组的求极值
  10. 【f1c200s/f1c100s】PWM驱动适配