首页 > 编程语言 > 详细

python json_tools对比两个json是否相等

时间:2021-07-09 01:02:08      阅读:25      评论:0      收藏:0      [点我收藏+]

一、介绍
  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]}]

 


 

python json_tools对比两个json是否相等

原文:https://www.cnblogs.com/yttbk/p/14987928.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!