比较两给json是否一致
比较两给json是否一致
- 直接上代码
直接上代码
package com.test.core.utils;import com.google.gson.Gson;
import com.google.gson.*;import java.util.*;/****/
public class JsonSameUtil {private static final Gson gson=new Gson();private static final JsonParser parser=new JsonParser();public static final List unSameList=new ArrayList();public static final Map unSameMap=new HashMap();/***比较两个bean是否等价*/public static boolean same(Object a,Object b){if (a==null){return b==null;}return same(gson.toJson(a),gson.toJson(b));}/***比较两个json字符串是否等价*/public static boolean same(String a,String b){if (a==null){return b==null;}if (a.equals(b)){return true;}JsonElement aElement=parser.parse(a);JsonElement bElement=parser.parse(b);if (gson.toJson(aElement).equals(gson.toJson(bElement))){return true;}return same(aElement,bElement);}/*** 抽象类,代表着json串的某一个元素* 元素可以是一个Json(JsonObject)、可以是一个数组(JsonArray)、可以是一个Java的基本类型(JsonPrimitive)、* 当然也可以为null(JsonNull)*/private static boolean same(JsonElement a,JsonElement b){if (a.isJsonObject()&& b.isJsonObject()){return same((JsonObject)a,(JsonObject)b);}else if (a.isJsonArray()&&b.isJsonArray()){return same((JsonArray)a,(JsonArray)b);}else if (a.isJsonPrimitive()&&b.isJsonPrimitive()){return same((JsonPrimitive)a,(JsonPrimitive)b);}else if (a.isJsonNull()&&b.isJsonNull()){return same((JsonNull)a,(JsonNull)b);}else {return Boolean.FALSE;}}/***JsonObject对象处理*/private static boolean same(JsonObject a,JsonObject b){Set<String> aSet=a.keySet();Set<String> bSet=b.keySet();if (!aSet.equals(bSet)){return false;}for (String aKet: aSet){if (!a.get(aKet).equals(b.get(aKet))){unSameList.add(aKet);}}if (!unSameList.isEmpty()){return false;}return true;}/***JsonArray对象的处理*/private static boolean same(JsonArray a,JsonArray b){if (a.size()!=b.size()){return false;}List<JsonElement> aList=toSortedList(a);List<JsonElement> bList=toSortedList(b);for (int i=0;i<aList.size();i++){if (!same(aList.get(i),bList.get(i))){unSameMap.put("jsonObject"+i,new ArrayList<>(unSameList));unSameList.clear();}}if (!unSameMap.isEmpty()){return false;}return true;}/***JsonElement的子类,结果比较*/private static boolean same(JsonPrimitive a,JsonPrimitive b){return a.equals(b);}private static boolean same(JsonNull a,JsonNull b){return true;}/***JsonArray排序*/private static List<JsonElement> toSortedList(JsonArray a){List<JsonElement> aList=new ArrayList<>();a.forEach(aList::add);aList.sort(Comparator.comparing(gson::toJson));return aList;}public static void main(String[] args) {String a="[\n" +" {\n" +" \"ownepe\":1,\n" +" \"gmtModified\":1578808875000,\n" +" \"invenType\":1,\n" +" \"quan\":0,\n" +" \"feature\":\"\",\n" +" \"lockQ\":0,\n" +" \"scId\":59999999,\n" +" \"gmtCreate\":1571897441000,\n" +" \"owd\":00000000,\n" +" \"usd\":33333333,\n" +" \"veon\":95,\n" +" \"stde\":\"ZZZZ\"\n" +" } +" ]";String b="[\n" +" {\n" +" \"ownepe\":1,\n" +" \"gmtModified\":1578808875000,\n" +" \"invenType\":1,\n" +" \"quan\":0,\n" +" \"feature\":\"\",\n" +" \"lockQ\":0,\n" +" \"scId\":59999999,\n" +" \"gmtCreate\":1571897441000,\n" +" \"owd\":00000000,\n" +" \"usd\":33333333,\n" +" \"veon\":950,\n" +" \"stde\":\"ZZZZ\"\n" +" }+" ]";boolean result=JsonSameUtil.same(a,b);System.out.println(result);System.out.println(unSameMap.toString());}}
参考:https://jingyan.baidu.com/article/7082dc1c2819aee40a89bdbb.html
比较两给json是否一致相关推荐
- java json 去重_js操作两个json数组合并、去重,以及删除某一项元素
两个json数组合并去重,以及删除某一项元素 let ha = [ {id:'H',name:'3'}, {id:'A',name:'6'}, {id:'B',name:'14'}, {id:'C', ...
- JS:两个json数组合并、去重,以及删除某一项元素
两个json数组合并去重,以及删除某一项元素 let ha = [{id:'H',name:'3'},{id:'A',name:'6'},{id:'B',name:'14'},{id:'C',name ...
- python怎么验证两个json是不是一样_比较Python中的两个JSON树
我有这种JSON树的文件夹结构.有什么方法可以将它与同类的Json树进行比较以获得差异(文件丢失或不同的文件属性(日期,crc,..)),并将其作为具有不同/缺失文件名称的列表返回.比较Python中 ...
- 两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)
本篇文章主要介绍了"两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)",主要涉及到两款JSON类库Jackson与JSON-lib的性能对比(新增第三款 ...
- python快速比较两个json_Python 比较两个json的方法
在测试过程中经常会对比两个json的异同,如果当json串较长时,一个一个的对比显然是很浪费时间的. 所以写一个比较json异同的测试方法是很有必要的. 下面介绍一下比较json异同的两种方法,以及测 ...
- JavaScript 怎么合并两个JSON,并覆盖重复键
如何合并两个JSON,并覆盖重复键 xxx={a:{a1:"a1"},b:{b1:{b11:1,b12:2}}}; yyy={b:{b1:{b11:4,b12:5}}}; 把 xx ...
- js比较两个JSON对象,返回变化值
废话不多说,直接上干货. let utils = {/*** 比较两个json(新json与老json)的不同,并返回 不同时的旧值(old_val)和新值(new_val)* @param {*} ...
- python校验两个json体
问题: 有两个json体,可是,需要验证json之间的内容有什么差异,然后,就想写一个json,尝试 桌面创建一个python文件,和创建的python文件项目目录下创建 json1.txt json ...
- es6如何修改json数组里的某个值_如何通过id使用纯Javascript(ES6)合并两个json对象值...
我有两个Javascript对象数组,并且想要将具有相同"ObjID"的两个Javascript对象的属性合并为一个Javascript对象.如何通过id使用纯Javascript ...
最新文章
- java. xerces转xml_Xerces -C++遇到的xml编码转换问题
- Redis的优势和特点
- 武汉一高中14名学生被剑桥牛津预录取!逻辑思路比结果更重要
- STM32使用TIM闪烁LED——输出比较方式
- cp linux 显示进度条_Unix/Linux/Mac os下 文件互传
- LOJ#2353 货币兑换
- sublime运行python代码_怎么用sublime运行python
- 《恋上数据结构第1季》单向链表、双向链表
- OpenGL ES基本用法
- 10分钟图解ASP.NET AJAX 1.0 RC开发
- 用实体类来做数据绑定(不用数据表数据字段的绑定方法)
- 微服务统一认证与授权的 Go 语言实现
- haneWIN Software NFS工具的使用
- 80286微处理器和80386的优缺点
- 基于C语言 51单片机应用技术 速成教程(持续更新中)
- 十大视频会议软件排名与免费视频会议软件有哪些?
- 贝叶斯统计——基础篇
- 微信企业邮箱登陆入口在哪?企业邮箱忘记密码怎么修改?
- 那些年我们踩过的Hive坑
- JS中[].slice.call的理解