当前位置: 首页 > news >正文

中国建设部网站关于资质网络上市场推广

中国建设部网站关于资质,网络上市场推广,该模板尚未授权此网站,小小影院免费高清电视剧背景 项目重构,对老接口进行技术改造。动代码后,难免会有些bug,我们需要对比改造前后接口的返回,来判断逻辑是否有问题,这就涉及两个json的对比。 常规的diff文本工具是按行对比,无法处理复杂的map。本文通…

背景

        项目重构,对老接口进行技术改造。动代码后,难免会有些bug,我们需要对比改造前后接口的返回,来判断逻辑是否有问题,这就涉及两个json的对比。

        常规的diff文本工具是按行对比,无法处理复杂的map。本文通过gson来解析json, 进而递归寻找diff。

依赖

<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version>
</dependency>

代码


import com.google.common.collect.Sets;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.tencent.trpc.core.utils.JsonUtils;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;public class Test {public static Set<String> diffKeySet = new HashSet<>();// 自定义需要忽略的字段public static Set<String> ignores = Sets.newHashSet("code","message");public static void main(String[] args) throws Exception {String formalStr = loadText("../formalStr.txt");String devStr = loadText("../devStr.txt");JsonObject formal = formal(formalStr);JsonObject dev = dev(devStr);findDiff("", formal, dev);filter();System.out.println(JsonUtils.toJson(diffKeySet));System.out.println(JsonUtils.toJson(diffKeySet.stream().map(s -> s.replaceAll("[\\d]", "")).collect(Collectors.toSet())));}private static void filter() {diffKeySet.removeIf(key -> ignores.stream().anyMatch(key::contains));}private static String loadText(String filePath) throws Exception {FileInputStream inputStream = null;BufferedReader bufferedReader = null;StringBuilder builder = new StringBuilder();try {String line;inputStream = new FileInputStream(filePath);bufferedReader = new BufferedReader(new InputStreamReader(inputStream));while ((line = bufferedReader.readLine()) != null) {builder.append(line.trim());}return builder.toString();} finally {close(inputStream, bufferedReader);}}public static void close(FileInputStream inputStream, BufferedReader bufferedReader) {try {if (inputStream != null) {inputStream.close();}if (bufferedReader != null) {bufferedReader.close();}} catch (IOException e) {e.printStackTrace();}}private static void findDiff(String prefix, JsonObject formal, JsonObject dev) {Set<String> formalKeySet = formal.keySet();formalKeySet.forEach(key -> {JsonElement formalElement = formal.get(key);JsonElement devElement = dev.get(key);findElementDiff(prefix, key, formalElement, devElement);});}public static void findElementDiff(String prefix, String key, JsonElement formalElement, JsonElement devElement) {String diffKeyPath = prefix + ":" + key;if (isNull(formalElement, devElement, diffKeyPath)) {return;}if (formalElement.isJsonObject()) {// 处理mapcheckObject(formalElement, devElement, diffKeyPath);return;}if (formalElement.isJsonArray()) {// 处理集合checkCollection(prefix, key, formalElement, devElement, diffKeyPath);return;}//if (formalElement.isJsonPrimitive()) {// 基本类型if (!formalElement.getAsString().equals(devElement.getAsString())) {addDiff(diffKeyPath);}//}}private static boolean isNull(JsonElement formalElement, JsonElement devElement, String diffKeyPath) {if (Objects.isNull(formalElement) || formalElement.isJsonNull()) {if (Objects.isNull(devElement) || devElement.isJsonNull()) {return true;}addDiff(diffKeyPath);return true;}if (Objects.isNull(devElement) || devElement.isJsonNull()) {addDiff(diffKeyPath);return true;}return false;}private static void checkObject(JsonElement formalElement, JsonElement devElement, String diffKeyPath) {if (!devElement.isJsonObject()) {addDiff(diffKeyPath);return;}JsonObject formalObject = formalElement.getAsJsonObject();JsonObject devObject = devElement.getAsJsonObject();findDiff(diffKeyPath, formalObject, devObject);}private static void checkCollection(String prefix, String key, JsonElement formalElement, JsonElement devElement,String diffKeyPath) {if (!devElement.isJsonArray()) {addDiff(diffKeyPath);return;}JsonArray formalArr = formalElement.getAsJsonArray();JsonArray devArr = devElement.getAsJsonArray();int size = formalArr.size();if (size != devArr.size()) {addDiff(diffKeyPath);return;}for (int i = 0; i < size; i++) {JsonElement formalArrElement = formalArr.get(i);JsonElement devArrElement = devArr.get(i);findElementDiff(prefix, String.format("%s[%d]", key, i), formalArrElement, devArrElement);}}public static void addDiff(String path) {diffKeySet.add(path);}public static JsonObject dev(String devJson) {return new Gson().fromJson(devJson, JsonObject.class);}public static JsonObject formal(String formalJson) {return new Gson().fromJson(formalJson, JsonObject.class);}

使用方式

        将不同环境的json串分别放到txt中,调整java脚本中的文件地址,运行即可。大家结合自身诉求,按需调整脚本。

        以文本1作为标准,脚本返回两行数据:

        文本1中与文本2不同的所有diff,list对象不计入下标;

        文本1中与文本2不同的去重后的diff,list对象不计入下标;

http://www.yayakq.cn/news/819160/

相关文章:

  • 大作业做网站网页设计实验报告步骤
  • 哪个网站查食品建设好做网站的宽度为多少
  • 《网站开发与应用wordpress制作关于页面
  • 有没有一些帮做名片的网站山东环保行业网站开发
  • 群晖ds1817做网站滁州市公共资源交易中心
  • 网站建设前期团队建设用什么做网站最好
  • wordpress百度推送工具seo职业培训学校
  • 网站服务器需要多少钱吉林移动网站
  • 网站建设费用申报seo咨询常德
  • 帮人做推广的网站电大形考任在哪个网站做
  • 程林街网站建设汉中微信网站建设推广
  • .net网站设计Wordpress写文章贴代码
  • 大概在网上建立一个网站一年要花多少钱呀WordPress集成插件到主题
  • 网站建设计划方案多用户商城网站建设公司
  • 教育培训门户网站模板下载wordpress视频主题吾爱破解版
  • 广州住房和城乡建设部网站首页wordpress 5.02支持php
  • 建站全过程网站建设水平
  • 备案之后怎样把 放到网站上网站添加留言板功能
  • 潍坊网站建设SEO优化熊掌号php网站开发接口开发
  • 简单企业网站源码 asp.net 公司介绍 产品展示网站建设和域名的关系
  • 中文单页面网站模板免费下载workpress做静态网站
  • 17网站一起做网店郑州公司网页
  • 怎么重新安装我的wordpress搜索引擎优化免费
  • 深圳龙华新区住房和建设局网站安徽省住房建设工程信息网站
  • 建设银行成都市第九支行 网站找人做jsp网站
  • 网站建设官方商城网站案例
  • 可以做动图的视频网站网站用的是建站公司的系统
  • 那个网站做网站托管wap手机网站尺寸
  • 微信的微网站模板如何在自己的电脑上做网站
  • 珠海新盈科技网站建设门户网站建设方案招标文件