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

做设计常用的素材网站北京做百度推广的公司

做设计常用的素材网站,北京做百度推广的公司,产品网,类似wordpress的软件背景 项目重构,对老接口进行技术改造。动代码后,难免会有些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.yidumall.com/news/89937.html

相关文章:

  • 大型商城网站建设方案东莞seo软件
  • 新网管理网站个人如何做seo推广
  • 广东专业网站定制怎么在百度上发布个人文章
  • 做游戏代练去那个网站如何优化关键词排名快速首页
  • 企业网站建设计什么科目8大营销工具指的是哪些
  • 烟台百度网站建设网站在线客服系统免费
  • 松原做公司网站软文是什么东西
  • 马鞍山做网站公司排名网站seo百度百科
  • meta 手机网站社区推广
  • 上海公司黄页网站小红书seo是什么
  • 网站管理系统图片拼多多关键词排名查询工具
  • 做网站必须要公司才能做吗全国人大常委会
  • wordpress modelsseo含义
  • 和小学生做的黄色网站品牌seo主要做什么
  • 做流程图网站免费建立网站步骤
  • 空间一个数据库可以做几个网站sem管理工具
  • 公司专业网站建设广告门
  • 自助建网站系统看电影灰色关键词代发可测试
  • 网站关键词库seo网络优化招聘信息
  • 我国政府网站集约化建设的关键山东大学经济研究院
  • 优化网站内容如何自己做一个网页
  • 网站公司做网站优化关键词怎么做
  • 有哪些靠谱的建站公司优化大师最新版下载
  • 河南襄县做网站的公司网络营销出来可以干什么工作
  • 廊坊电商网站建设宁德市蕉城区疫情
  • 插件 wordpress关键词优化的五个步骤
  • 网站优化最牛逼的软件搜索引擎站长平台
  • 网站播放功能难做吗外链工具xg下载
  • 自己做网站商城需要营业执照吗下载百度网盘app
  • 淄博网站制作设计公司石家庄新闻网头条新闻