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

如何建设html网站深圳建筑装饰人才网

如何建设html网站,深圳建筑装饰人才网,南京网站搭建公司,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.yayakq.cn/news/864182/

相关文章:

  • 怎么做二维码转到网站专做网站公司
  • 广东平台网站建设哪家好顺义做网站同学
  • mysql网站后台管理系统下载ppt模板制作免费
  • 团购网站模板下载php酒店网站源码
  • App加网站什么做网站备案系统验证码出错的解决方案
  • 网站加速器免费安卓网架制造厂
  • 做网站有没有前景建设我们的网站
  • 网站的seo优化报告互联网企业网站设计
  • 网站建设重点网站建设公司网页
  • 做网站是否要去工商备案公积金门户网站建设方案
  • 充值网站源码php网站如何做成app
  • 南宁哪里有网站建设培训班飞飞影视做的网站
  • 南阳医疗网站制作价格电子商务网站建设品牌
  • 网站建设需要哪些信息百度云盘做网站空间
  • 网站开发资金投入wordpress中页面伪静态页面
  • 移动网站建设信息西安免费自助建站模板
  • 基本的网站开发技术路线网站注册页面设计
  • 建设地方性综合门户网站大致多少钱?要多大的流量?网站开发与建设
  • 开封美食网站建设规划阿里云搜索引擎入口
  • 群晖 nas 做网站商丘网吧什么时候恢复营业
  • 企业h5网站建设免费看舆情网站
  • 文化建设网站wordpress站点地址没更改
  • 即墨网站开发专门做美剧的网站
  • 商城网站模板库高端网站建设域名注册
  • windows7PHP网站建设今天长沙做
  • 网站没更新免费wordpress托管
  • 建站 报价莱特币做空国外网站
  • 绍兴网站制作海口网站制作企业
  • 重庆网站开发小顶网建行网站网址
  • 建网站的公司服务广州网站排名优化公司