Python实现json串比对并输出差异结果

该博客介绍了一种利用递归算法对比两个JSON字符串的方法,主要用于幂等接口返回体的验证。通过逐层级、逐字段比较,可以找出两份JSON数据的差异。

主要是利用递归,逐层级、逐次、逐字段比较;可以用于幂等类接口的返回体校验。

class JsonCompare:
	def __init__(self, second_data, first_data, debug_model=False):
		"""
		用于两个json串比对,输出两串json字段差异

		:param second_data: 用于比对的新json
		:param first_data: 基准json
		:param debug_model: 为True时将在控制台输出比对结果,默认不开启
		"""

		self.compare_result = []  # 存放字段差异
		self.compare_error = []  # 存放字段比对异常
		self.compare(second_data, first_data)

		if debug_model:
			for i in self.compare_result:
				print(i)
			for i in self.compare_error:
				print(i)

	def compare(self, second_data, first_data, path=''):
		try:
			if not isinstance(second_data, (list, tuple, dict)):
				# 比对非list\tuple\dict类型的数据
				if not second_data == first_data:
					msg = {
   
   
						'field': path,
						'error_type': 'field value diff',
						'secondResp': second_data,
						'firstResp': first_data
					}
					self.compare_result.append(msg)

			elif isinstance(second_data, (list, tuple)):
				# 如果新数据是list/tuple,则判断老数据是否类型一致;不一致则追加到compare_error
				if type(second_data) != type(first_data):
					msg = {
   
   
						'field': path,
						'error_type': "field type diff",
						'secondResp': f"type is {
     
     type(second_data)}",
						'firstResp': f"type is {
     
     type(first_data)}"
					}
					self.compare_result.append(msg)
					return
				if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值