System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据对比,具体涉及一种基于序列化相似度计算的数据对比方法。
技术介绍
1、在软件开发过程中,通常需要对两个接口(如http接口、dubbo接口、操作数据库接口和领域层接口等)的出入参进行自动化对比的场景。在流量回放场景中,经常需要对请求接口的入参和出参进行对比,从而判断流量回放的结果是否成功。针对回放失败时,部分场景也希望能获取到相似度较高的参数进行使用,从而保障后续流程能继续执行。
2、针对业务场景中请求接口的入参与出参一般情况都是一个复杂的参数对象,如可能包含list、map、set、基本数据类型和数组等类型字段,同时参数对象中可能还多层嵌套了各种业务自定的对象。因此,想要实现两个复杂参数对象是否一致的对比比较困难。
3、现有技术通常采用以下两种技术方案进行参数对象对比,使用json通过字段排序后序列化为json字符串,然后直接判断json字符串是否相等;或直接通过java反射方式获取对应字段的值,然后直接对比字段的值是否相同。以上两种方式存在以下问题,不支持先忽略某些字段,然后再进行数据对比;反射方式实现数据对比时,性能不高,且容易出现不支持的异常场景;复杂对象数据对比,容易出现不成功问题;数据对比匹配失败时,无法获取相似度最高的对象。
技术实现思路
1、本专利技术要解决的技术问题是:提供一种基于序列化相似度计算的数据对比方法,解决现有复杂参数对象对比性能低、成功率低等技术问题。
2、为实现上述目的,本专利技术采用的技术方案如
3、一种基于序列化相似度计算的数据对比方法,包括以下步骤:
4、步骤1、将两个待对比的参数对象分别转为第一json对象和第二json对象;
5、步骤2、构建忽略规则,循环遍历忽略规则,将第一json对象和第二json对象中待忽略的字段的值设置为null,分别得到第一预处理json对象和第二预处理json对象;
6、步骤3、将第一预处理json对象和第二预处理json对象分别序列化为第一字符串和第二字符串;
7、步骤4、计算出第一字符串改变为第二字符串所需的最小操作次数;
8、步骤5、根据第一字符串和第二字符串的字符串长度和最小操作次数,计算出第一字符串和第二字符串的相似度;
9、步骤6、判断相似度是否为100%,若为100%表示两个参数对象一致,反之则不一致。
10、进一步地,步骤2中,对于待忽略的非数组字段,将提示符和非数组字段的字段名称合并,构建一条忽略规则;对于待忽略的数组字段,将提示符、数组字段的字段名称、中括号合并,构建一条忽略规则;当中括号内存在数字且数字为n时,n为正整数,表示忽略当前数组字段下的第n个值,当中括号内不存在数字时,表示忽略当前数组字段下的所有值。
11、进一步地,步骤3中,采用hessian序列化或json序列化将第一预处理json对象和第二预处理json对象分别序列化为第一字符串和第二字符串。
12、进一步地,步骤3还包括:分别对第一预处理json对象和第二预处理json对象所有参数名的英文按字母顺序、数字按从小到大进行排序,排序后再进行序列化。
13、进一步地,步骤4中,采用编辑距离算法计算出第一字符串改变为第二字符串所需的最小操作次数。
14、进一步地,步骤4中,最小操作次数的每次操作为修改1个字符。
15、进一步地,步骤5中,相似度s的计算公式为:
16、;
17、d表示第一字符串改变为第二字符串所需的最小操作次数,s1(l)、s2(l)分别表示第一字符串和第二字符串的字符串长度。
18、进一步地,还包括若相似度不为100%,判断是否需要获取相似度最高的两个参数对象进行返回,不需要则直接结束;需要则查找相似度最高的两个参数对象进行模拟,获取模拟结果并返回。
19、与现有技术相比,本专利技术具有以下有益效果:
20、本专利技术将参数对象转化为json对象后通过自定义的忽略规则忽略部分字段的干扰能力,然后将json对象序列化为字符串,再利用字符串的相似度进行参数对象的对比。除此之外,本专利技术还利用字符串的相似度解决异常场景下快速匹配出相似度最高的参数对象进行替换使用,从而解决异常场景直接被中断回放的问题。
本文档来自技高网...【技术保护点】
1.一种基于序列化相似度计算的数据对比方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种基于序列化相似度计算的数据对比方法,其特征在于,步骤2中,对于待忽略的非数组字段,将提示符和非数组字段的字段名称合并,构建一条忽略规则;对于待忽略的数组字段,将提示符、数组字段的字段名称、中括号合并,构建一条忽略规则;当中括号内存在数字且数字为N时,N为正整数,表示忽略当前数组字段下的第N个值,当中括号内不存在数字时,表示忽略当前数组字段下的所有值。
3.根据权利要求1所述的一种基于序列化相似度计算的数据对比方法,其特征在于,步骤3中,采用Hessian序列化或JSON序列化将第一预处理JSON对象和第二预处理JSON对象分别序列化为第一字符串和第二字符串。
4.根据权利要求1所述的一种基于序列化相似度计算的数据对比方法,其特征在于,步骤3还包括:分别对第一预处理JSON对象和第二预处理JSON对象所有参数名的英文按字母顺序、数字按从小到大进行排序,排序后再进行序列化。
5.根据权利要求1所述的一种基于序列化相似度计算的数据对比方法,
6.根据权利要求1所述的一种基于序列化相似度计算的数据对比方法,其特征在于,步骤4中,最小操作次数的每次操作为修改1个字符。
7.根据权利要求1所述的一种基于序列化相似度计算的数据对比方法,其特征在于,步骤5中,相似度S的计算公式为:
8.根据权利要求1所述的一种基于序列化相似度计算的数据对比方法,其特征在于,还包括若相似度不为100%,判断是否需要获取相似度最高的两个参数对象进行返回,不需要则直接结束;需要则查找相似度最高的两个参数对象进行模拟,获取模拟结果并返回。
...【技术特征摘要】
1.一种基于序列化相似度计算的数据对比方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种基于序列化相似度计算的数据对比方法,其特征在于,步骤2中,对于待忽略的非数组字段,将提示符和非数组字段的字段名称合并,构建一条忽略规则;对于待忽略的数组字段,将提示符、数组字段的字段名称、中括号合并,构建一条忽略规则;当中括号内存在数字且数字为n时,n为正整数,表示忽略当前数组字段下的第n个值,当中括号内不存在数字时,表示忽略当前数组字段下的所有值。
3.根据权利要求1所述的一种基于序列化相似度计算的数据对比方法,其特征在于,步骤3中,采用hessian序列化或json序列化将第一预处理json对象和第二预处理json对象分别序列化为第一字符串和第二字符串。
4.根据权利要求1所述的一种基于序列化相似度计算的数据对比方法,其特征在于,步骤3还包括:分别对...
【专利技术属性】
技术研发人员:李茹钰,张鑫,刘毅强,张自平,
申请(专利权)人:云筑信息科技成都有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。