json对比工具类

记录json对比工具类


/**
 * @program: bedrock
 * @description: 复杂对象比较工具类
 * @author: 
 * @create: 2022-01-26 22:49
 **/

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @description: 对象对比工具类
 * @author: guo-coffee
 */
public class ComparedUtils {
   

	/**
	 * 示例说明(更多事例可查看main方法):
	 * 对比json:{"id":"tom","username":"tom","age":18,"address":[{"province":"上海市"},{"city":"上海市"},{"disrtict":"静安区"},{"id":"静安区"}]}
	 *
	 * 示例一:调用compareJson(JSONObject json1, JSONObject json2, List<String> compareList)
	 *      假设指定username、address_province两列对比,compareList中需要放入username、address、address_province。
	 *      解释:若compareList集合中不放address,则表示整个address均不会进入比较,所以json嵌套多层时,将父key也需要放入compareList中
	 *
	 * 事例二:调用compareJson(JSONObject json1, JSONObject json2, List<String> filterList,boolean flag)
	 *      1、假设指定username、address_province两列不进行对比,filterList中需要放入username、address_province即可
	 *      2、假设整个address均不进行比对,filterList中需要放入username、address即可
	 */

	/**
	 * 默认过滤列名(由于项目会继承一些基类[例如ID、操作人、操作时间、修改人、修改时间等],基类中属性对比无任何意义,可以过滤掉)
	 */
	private static final List<String> DEFAULT_FILTER_COLUMNS = Arrays.asList("id","createDate","updateDate","createPersonId","createPersonName","updatePersonId","updatePersonName","concurrencyVersion","delflag","tendId");

	/**
	 * json嵌套多层时,父子key拼接字符
	 */
	private static final String SEPARATOR = "->";

	/**
	 * 两个对象对比(全部列对比)
	 * @param json1 对比对象,必传
	 * @param json2 对比对象,必传
	 * @return
	 */
	public static Map<String,List<String>> compareJson(JSONObject json1, JSONObject json2){
   
		return compareJson(json1,json2,false);
	}

	/**
	 * 两个对象对比
	 * @param json1 对比对象,必传
	 * @param json2 对比对象,必传
	 * @param flag 是否采用默认过滤策略-->true:采用 false:不采用
	 * @return
	 */
	public static Map<String,List<String>> compareJson(JSONObject json1, JSONObject json2, boolean flag){
   
		return compareJson(json1,json2,null,null,flag,null,null,new ArrayList<>(),new ArrayList<>());
	}

	/**
	 * 两个对象对比
	 * @param json1 对比对象,必传
	 * @param json2 对比对象,必传
	 * @param compareList 要比较的列
	 * @return
	 */
	public static Map<String,List<String>> compareJson(JSONObject json1, JSONObject json2, List<String> compareList){
   
		return compareJson(json1,json2,compareList,null,false,null,null,new ArrayList<>(),new ArrayList<>());
	}

	/**
	 * 两个对象对比
	 * @param json1 对比对象,必传
	 * @param json2 对比对象,必传
	 * @param filterList 不需要比较的列
	 * @param flag 是否需要过滤默认列-->true:需要 false:不需要
	 * @return
	 */
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值