python json_tools对比两个json是否相等

一、介绍
  json_tools是python的一个第三方模块,用于比对两个目标json是否相等,如果相等则返回True,否则返回包含不相等项的list。
但是如果两个目标json中都包含list,且两个list原本是相同的,只是list中元素位置不一样;而json_tools是默认用两个list中相同位置的元素进行比对,这样原本一样的list比对的结果是不相等的了。
如a=[a,b,c,d],b=[a,c,b,d],这两个list本是一样的,但是json_tools是用aa,bc,cb,dd进行对比,其结果自然是false。

二、安装
  pip install json_tools

三、使用
3.1 单层比对

 1 import json_tools
 2 
 3 a = {'name':'yanan',"age":'20',"city":'beijing'}
 4 b = {'name':'Yanan',"age":'20',"town":'xicheng'}
 5 
 6 def json_fiff(json_1,json_2):
 7     result = json_tools.diff(json_1,json_2)
 8     return result
 9 
10 res = json_fiff(a,b)
11 print(res)
输出结果:
[{'replace': '/name', 'value': 'Yanan', 'prev': 'yanan'}, {'remove': '/city', 'prev': 'beijing'}, {'add': '/town', 'value': 'xicheng'}]

上面的输出结果显示的是b相对于a的变化(即由a变成b有哪些改变):
1)b和a都有键“name”,但b相对于a来说键“name”的值发生了变化,由原来的“yanan”变成了“Yanan”,所以比较结果的list里有{'replace': '/name', 'value': 'Yanan', 'prev': 'yanan'}
 其中replace标识发生变化的键,value标识变化后即当前a该键的值,prev标识该键此前的值
2)b相对于a没有键city键,所以结果的list里有{'remove': '/city', 'prev': 'beijing'}
3)b中的town相对于a是新增的键,所以结果list里有{'add': '/town', 'value': 'xicheng'}

3.2 多层嵌套的对比

 1 import json_tools
 2 
 3 a = {"name": "yanan", "pro": {"sh": "shandong", "city": ["zibo", "weifang"]}}
 4 b = {"name": "Yanan", "pro": {"sh": "shandong", "town": ["taian", "weifang"]}}
 5 
 6 def json_fiff(json_1,json_2):
 7     result = json_tools.diff(json_1,json_2)
 8     return result
 9 
10 res = json_fiff(a,b)
11 print(res)
输出结果:
[{'replace': '/name', 'value': 'Yanan', 'prev': 'yanan'}, {'remove': '/pro/city', 'prev': ['zibo', 'weifang']}, {'add': '/pro/town', 'value': ['taian', 'weifang']}]

 


 

上一篇:设计链表 leetcode


下一篇:实现双向链表(带傀儡节点)