比较两给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是否一致相关推荐

  1. java json 去重_js操作两个json数组合并、去重,以及删除某一项元素

    两个json数组合并去重,以及删除某一项元素 let ha = [ {id:'H',name:'3'}, {id:'A',name:'6'}, {id:'B',name:'14'}, {id:'C', ...

  2. JS:两个json数组合并、去重,以及删除某一项元素

    两个json数组合并去重,以及删除某一项元素 let ha = [{id:'H',name:'3'},{id:'A',name:'6'},{id:'B',name:'14'},{id:'C',name ...

  3. python怎么验证两个json是不是一样_比较Python中的两个JSON树

    我有这种JSON树的文件夹结构.有什么方法可以将它与同类的Json树进行比较以获得差异(文件丢失或不同的文件属性(日期,crc,..)),并将其作为具有不同/缺失文件名称的列表返回.比较Python中 ...

  4. 两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)

    本篇文章主要介绍了"两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)",主要涉及到两款JSON类库Jackson与JSON-lib的性能对比(新增第三款 ...

  5. python快速比较两个json_Python 比较两个json的方法

    在测试过程中经常会对比两个json的异同,如果当json串较长时,一个一个的对比显然是很浪费时间的. 所以写一个比较json异同的测试方法是很有必要的. 下面介绍一下比较json异同的两种方法,以及测 ...

  6. JavaScript 怎么合并两个JSON,并覆盖重复键

    如何合并两个JSON,并覆盖重复键 xxx={a:{a1:"a1"},b:{b1:{b11:1,b12:2}}}; yyy={b:{b1:{b11:4,b12:5}}}; 把 xx ...

  7. js比较两个JSON对象,返回变化值

    废话不多说,直接上干货. let utils = {/*** 比较两个json(新json与老json)的不同,并返回 不同时的旧值(old_val)和新值(new_val)* @param {*} ...

  8. python校验两个json体

    问题: 有两个json体,可是,需要验证json之间的内容有什么差异,然后,就想写一个json,尝试 桌面创建一个python文件,和创建的python文件项目目录下创建 json1.txt json ...

  9. es6如何修改json数组里的某个值_如何通过id使用纯Javascript(ES6)合并两个json对象值...

    我有两个Javascript对象数组,并且想要将具有相同"ObjID"的两个Javascript对象的属性合并为一个Javascript对象.如何通过id使用纯Javascript ...

最新文章

  1. java. xerces转xml_Xerces -C++遇到的xml编码转换问题
  2. Redis的优势和特点
  3. 武汉一高中14名学生被剑桥牛津预录取!逻辑思路比结果更重要
  4. STM32使用TIM闪烁LED——输出比较方式
  5. cp linux 显示进度条_Unix/Linux/Mac os下 文件互传
  6. LOJ#2353 货币兑换
  7. sublime运行python代码_怎么用sublime运行python
  8. 《恋上数据结构第1季》单向链表、双向链表
  9. OpenGL ES基本用法
  10. 10分钟图解ASP.NET AJAX 1.0 RC开发
  11. 用实体类来做数据绑定(不用数据表数据字段的绑定方法)
  12. 微服务统一认证与授权的 Go 语言实现
  13. haneWIN Software NFS工具的使用
  14. 80286微处理器和80386的优缺点
  15. 基于C语言 51单片机应用技术 速成教程(持续更新中)
  16. 十大视频会议软件排名与免费视频会议软件有哪些?
  17. 贝叶斯统计——基础篇
  18. 微信企业邮箱登陆入口在哪?企业邮箱忘记密码怎么修改?
  19. 那些年我们踩过的Hive坑
  20. JS中[].slice.call的理解

热门文章

  1. 夏季晚睡早起符合养生原则
  2. 设计师必备的设计软件
  3. Eclipse中快捷键Ctrl + Alt + 向上箭头 或者 Ctrl + Alt + 向下箭头与Windows冲突
  4. 技术之外——哀悼我的大学舍友
  5. 基于瑞芯微平台cif接口dvp相机的视频接入(ov2640、rv1126为例)
  6. linux下配置NAT服务
  7. 【python数据类型】
  8. 一个架构师的真正职责
  9. XML文件怎么添加注释
  10. C# 定时服务之Hangfire使用、与Quartz的对比