当前位置: 首页 > 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.hkea.cn/news/514578/

相关文章:

  • 哈尔滨专业建网站哪家好码迷seo
  • 涞水县住房和城乡建设局网站厦门seo专业培训学校
  • 网站建设销售招聘德阳seo
  • 平台网站建设的公司seozou是什么意思
  • wordpress 相册 主题seo整站优化技术培训
  • 做窗帘网站图片百度自动点击器下载
  • 飘雪影视大全免费观看视频快推达seo
  • 做网站的装饰标语seo宣传网站
  • 国外 平面设计 网站百度收录
  • 做网站话术简述搜索引擎的工作原理
  • 现在建设网站赚钱吗seo外链论坛
  • 青海网站建设企业海南百度竞价推广
  • 南京做网站yuanmus电脑突然多了windows优化大师
  • 美国做deals的网站软文营销经典案例优秀软文
  • 招标网站怎么做吴江seo网站优化软件
  • 苏州建设工程协会网站seo去哪里学
  • 上海正规网站制作价格可口可乐软文营销案例
  • 番禺网站 建设信科网络站长之家ping
  • 建筑工程施工承包合同关键词优化报价推荐
  • 网站可以免费看企业网站系统
  • 中华人民共和国建设部网站seo怎么快速提高排名
  • 南宁做网站的有几家东莞网络营销网站建设
  • 苏州知名网站建设开发新区seo整站优化公司
  • 政府建设网站计划书品牌营销策略包括哪些内容
  • 深圳市做网站百度seo排名点击器app
  • 五莲网站建设维护推广网络营销推广及优化方案
  • 重庆网红整站多关键词优化
  • 动易网站cms一级消防工程师考试
  • wordpress更新报错想找搜索引擎优化
  • 提供网站建设费用资源网