CN113536762A - Json文本的比对方法及装置 - Google Patents
Json文本的比对方法及装置 Download PDFInfo
- Publication number
- CN113536762A CN113536762A CN202110800666.5A CN202110800666A CN113536762A CN 113536762 A CN113536762 A CN 113536762A CN 202110800666 A CN202110800666 A CN 202110800666A CN 113536762 A CN113536762 A CN 113536762A
- Authority
- CN
- China
- Prior art keywords
- message
- json
- value pair
- target
- key value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 50
- 238000004458 analytical method Methods 0.000 claims abstract description 87
- 238000004590 computer program Methods 0.000 claims description 14
- 238000006243 chemical reaction Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 16
- 238000004891 communication Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 210000001072 colon Anatomy 0.000 description 2
- 239000003086 colorant Substances 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/194—Calculation of difference between files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/565—Conversion or adaptation of application format or content
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Health & Medical Sciences (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本申请提供了一种JSON文本的比对方法及装置,可用于金融领域或其他领域,该方法包括:获取第一JSON报文和第二JSON报文;将第一JSON报文转化为LinkedHashMap类型的第一报文,并将第二JSON报文转化为LinkedHashMap类型的第二报文;根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集;根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出。本申请能够提高JSON文本比对的准确性。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种JSON文本的比对方法及装置。
背景技术
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在服务端测试过程中经常需要对返回的JSON报文进行比对,以便于找出其中的差异,判断服务端返回的JSON报文中的内容是否符合预期。
现有的比对JSON报文的方案主要有两种,第一种是依靠人工肉眼对比两个JSON报文;第二种是使用其他已公开的网页比对工具,比如站长工具对JSON报文进行比对。但是,JSON报文中的键值对是无序的,服务端每次接收的JSON报文中的键值对顺序都会改变,键值对顺序改变后的两个SON字符串实质是相同的。由于站长工具只能对文本进行对比,如果两个JSON报文中的键值对顺序发生改变,站长工具返回与实际对比结论不一致的错误的对比结果。
发明内容
针对现有技术中的问题,本申请提出了一种JSON文本的比对方法及装置,能够提高JSON文本比对的准确性。
为了解决上述技术问题,本申请提供以下技术方案:
第一方面,本申请提供一种JSON文本的比对方法,包括:
获取第一JSON报文和第二JSON报文;
将第一JSON报文转化为LinkedHashMap类型的第一报文,并将第二JSON报文转化为LinkedHashMap类型的第二报文;
根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集;
根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出。
进一步地,所述根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集,包括:
根据所述第一报文中的键值对和该键值对中的值的数据类型,生成第一解析结果集;
根据所述第二报文中的键值对和该键值对中的值的数据类型,生成第二解析结果集。
进一步地,所述根据所述第一报文中的键值对和该键值对中的值的数据类型,生成第一解析结果集,包括:
将所述第一报文作为目标报文,将第一报文中的首位的键值对作为目标键值对,执行遍历步骤,该遍历步骤包括:若所述目标键值对中的值符合第一判断条件或者第二判断条件,则将所述目标报文的JSON路径和目标键值对中的键组成当前JSON路径,将所述目标键值对的值作为当前JSON路径对应的值,加入第一解析结果集;
若所述目标报文存在下一位的键值对,则将该下一位的键值对作为新的目标键值对,目标报文保持不变,返回执行所述遍历步骤;
若所述目标报文不存在下一位的键值对、该目标报文与第一报文不同并且第一报文存在下一位的键值对,则将所述第一报文的下一位的键值对作为目标键值对,第一报文作为目标报文,返回执行所述遍历步骤;
若所述目标报文不存在下一位的键值对、该目标报文与第一报文不同并且第一报文不存在下一位的键值对,则中止当前操作;
若所述目标报文为第一报文并且不存在下一位的键值对,则中止当前操作;
所述第一判断条件为所述目标键值对的值不是Map类型并且不是列表类型;所述第二判断条件为所述目标键值对的值为列表类型并且列表中的子元素不是Map类型。
进一步地,所述根据所述第二报文中的键值对和该键值对中的值的数据类型,生成第二解析结果集,包括:
将所述第二报文作为目标报文,将第二报文中的首位的键值对作为目标键值对,执行遍历步骤,该遍历步骤包括:若所述目标键值对中的值符合第一判断条件或者第二判断条件,则将所述目标报文的JSON路径和目标键值对中的键组成当前JSON路径,将所述目标键值对的值作为当前JSON路径对应的值,加入第二解析结果集;
若所述目标报文存在下一位的键值对,则将该下一位的键值对作为新的目标键值对,目标报文保持不变,返回执行所述遍历步骤;
若所述目标报文不存在下一位的键值对、该目标报文与第二报文不同并且第二报文存在下一位的键值对,则将所述第二报文的下一位的键值对作为目标键值对,第二报文作为目标报文,返回执行所述遍历步骤;
若所述目标报文不存在下一位的键值对、该目标报文与第二报文不同并且第二报文不存在下一位的键值对,则中止当前操作;
若所述目标报文为第二报文并且不存在下一位的键值对,则中止当前操作;
所述第一判断条件为所述目标键值对的值不是Map类型并且不是列表类型;所述第二判断条件为所述目标键值对的值为列表类型并且列表中的子元素不是Map类型。
进一步地,所述遍历步骤,还包括:
若所述目标键值对的值为Map类型,则将所述目标键值对的值转化成LinkedHashMap类型后作为新的目标报文,将目标报文的JSON路径和目标键值对中的键组成新的目标报文的JSON路径,将新的目标报文中首位的键值对作为新的目标键值对,返回执行所述遍历步骤。
进一步地,所述遍历步骤,还包括:
若所述目标键值对的值为列表类型并且列表中的子元素为Map类型,则将所述子元素转化成LinkedHashMap类型后作为新的目标报文,将目标报文的JSON路径和目标键值对中的键组成新的目标报文的JSON路径,将新的目标报文中首位的键值对作为新的目标键值对,返回执行所述遍历步骤。
进一步地,所述根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出,包括:
根据所述第一解析结果集和第二解析结果集中的当前JSON路径和值,生成比对结果列表并输出。
第二方面,本申请提供一种JSON文本的比对装置,包括:
获取模块,用于获取第一JSON报文和第二JSON报文;
转化模块,用于将第一JSON报文转化为LinkedHashMap类型的第一报文,并将第二JSON报文转化为LinkedHashMap类型的第二报文;
生成模块,用于根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集;
比对模块,用于根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出。
第三方面,本申请提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述的JSON文本的比对方法。
第四方面,本申请提供一种计算机可读存储介质,其上存储有计算机指令,所述指令被执行时实现所述的JSON文本的比对方法。
由上述技术方案可知,本申请提供一种JSON文本的比对方法及装置。其中,该方法包括:获取第一JSON报文和第二JSON报文;将第一JSON报文转化为LinkedHashMap类型的第一报文,并将第二JSON报文转化为LinkedHashMap类型的第二报文;根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集;根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出,能够提高JSON文本比对的准确性;具体地,能够支持复杂多层的JSON报文的比对,提高报文比对的准确性,节省人力成本,并且可以明确各个值对应的详细路径,便于接下来异常分析等;同时,还能够提高报文比对的效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例中JSON文本的比对方法的流程示意图;
图2是本申请实施例中JSON文本的比对方法的步骤311至步骤315的流程示意图;
图3是本申请一种举例中的客户端与服务器之间的关系示意图;
图4是本申请一种举例中的JSON树示意图;
图5是本申请另一种举例中的JSON树示意图;
图6是本申请实施例中JSON文本的比对装置的结构示意图;
图7为本申请实施例的电子设备的系统构成示意框图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了解决上述现有技术中存在的问题,本方案考虑从改变现有的JSON文本的比对方式入手,提供一种基于JSON报文的比对方法及装置,可以适用于多种编程语言,支持复杂结构的JSON报文的比对,可以将JSON报文中键值对的顺序与客户端发送的顺序统一,可以基于递归方法从深度、广度解析报文,解析结果集中的当前JSON路径包含有对应值处于原始JSON报文中的完整路径,可以基于解析结果集回溯出整个原始JSON报文,对比结果可以复用于JSON报文差异的可视化展示;生成解析结果集的方式并非唯一,亦可通过其它算法得到同样或相似解析结果集。
需要说明的是,本申请公开的JSON文本的比对方法及装置可用于金融技术领域,也可用于除金融技术领域之外的任意领域,本申请公开的JSON文本的比对方法及装置的应用领域不做限定。
具体通过下述各个实施例进行说明。
为了提高JSON文本比对的准确性,本实施例提供一种执行主体是JSON文本的比对装置的JSON文本的比对方法,该JSON文本的比对装置包括但不限于服务器,如图1所示,该方法具体包含有如下内容:
步骤100:获取第一JSON报文和第二JSON报文。
具体地,所述第一JSON报文和第二JSON报文可以是前端页面发送的两个JSON报文。
步骤200:将第一JSON报文转化为LinkedHashMap类型的第一报文,并将第二JSON报文转化为LinkedHashMap类型的第二报文。
具体地,将传入的JSON报文转换为LinkedHashMap类型,可以保证转换后的报文中键值对的顺序与前端发送的该转换后的报文对应JSON报文的键值对的顺序相同,可以避免由于JSON报文键值对顺序发生改变,导致对比结果错误,方便使用人员按原始报文顺序查看解析结果;进一步地,在步骤200之前,可以应用fastjson库尝试将JSON报文强制转换为JSON对象类型,若强制转换失败,则应用正则表达式,将JSON报文格式化为标准JSON格式,将以标准JSON格式的JSON报文转换为JSON对象类型,提高格式化的成功率,进而提高JSON文本比对的准确性,JSON报文可以是第一JSON报文,也可以是第二JSON报文。
举例来说,正则表达式:emptyValueReg=":\\s*([{]{1})\\s*:\\s*([}]{1})";表示若JSON报文中只存在一个大括号并且大括号内仅包含有一个冒号,则该JSON报文标准化后将大括号里面的冒号去除。正则表达式:fillValueReg="([a-zA-Z$\u4e00-\u9fa5_]{1}[\\w$\u4e00-\u9fa5]*)\\s*:\\s*([^\\[\\],{}'\"]+)";表示匹配通用键值对,若键值对中的值不存在单引号和双引号,则JSON报文标准化后给value添加单引号或双引号。
步骤300:根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集。
可以理解的是,若第一报文为空,则生成空的第一解析结果集;若第二报文为空,则生成空的第二解析结果集。所述第一解析结果集可以包含有:第一报文对应的各个当前JSON路径及其各自对应的值;所述第二解析结果集可以包含有:第二报文对应的各个当前JSON路径及其各自对应的值。
步骤400:根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出。
为了进一步提高JSON报文比对的准确性,在本申请一个实施例中,步骤300包括:
步骤310:根据所述第一报文中的键值对和该键值对中的值的数据类型,生成第一解析结果集。
具体地,所述键值对中的值的数据类型可以是Map类型、列表类型、字符串、数值和布尔型等。
步骤320:根据所述第二报文中的键值对和该键值对中的值的数据类型,生成第二解析结果集。
在现有技术中,当接口返回JSON参数和层级很多时,依靠人工肉眼对比将会耗费大量的时间,而且容易遗漏,对比结果的准确性不高,基于此,为了实现复杂多层的JSON报文对比,参见图2,在本申请一个实施例中,步骤310包括:
步骤311:将所述第一报文作为目标报文,将第一报文中的首位的键值对作为目标键值对,执行遍历步骤,该遍历步骤包括:若所述目标键值对中的值符合第一判断条件或者第二判断条件,则将所述目标报文的JSON路径和目标键值对中的键组成当前JSON路径,将所述目标键值对的值作为当前JSON路径对应的值,加入第一解析结果集。
具体地,第一报文的JSON路径可以为空字符串;若当前JSON路径包含有多个键,则各键之间可以以分隔符隔开,如“.”或“:”等。第一报文可以包含有多个子元素,可以将每个子元素作为一组键值对;举例来说,如表1所示,表1中的报文包含有4个子元素。
表1
步骤312:若所述目标报文存在下一位的键值对,则将该下一位的键值对作为新的目标键值对,目标报文保持不变,返回执行所述遍历步骤。
步骤313:若所述目标报文不存在下一位的键值对、该目标报文与第一报文不同并且第一报文存在下一位的键值对,则将所述第一报文的下一位的键值对作为目标键值对,第一报文作为目标报文,返回执行所述遍历步骤。
具体地,若目标报文与第一报文不同,可以根据目标报文的JSON路径,确定第一报文是否存在下一位的键值对,举例来说,如表1所示,若目标报文为{"sub_map_item":"empty"},目标报文的JSON路径为:list_3[0].sub_map_item,根据list_3[0]可以确定第一报文存在list_3[0]对应的下一位的键,因此,第一报文存在下一位的键值对:"user_info":{"name":"Big_Cat","age":25,"is_marry":false,"wife":null}。
步骤314:若所述目标报文不存在下一位的键值对、该目标报文与第一报文不同并且第一报文不存在下一位的键值对,则中止当前操作。
步骤315:若所述目标报文为第一报文并且不存在下一位的键值对,则中止当前操作;所述第一判断条件为所述目标键值对的值不是Map类型并且不是列表类型;所述第二判断条件为所述目标键值对的值为列表类型并且列表中的子元素不是Map类型。
可以理解的是,若中止当前操作可以表示得到最终的第一解析结果集。
为了实现复杂多层的报文对比,进一步提高JSON报文比对的准确性,在本申请一个实施例中,步骤320包括:
步骤321:将所述第二报文作为目标报文,将第二报文中的首位的键值对作为目标键值对,执行遍历步骤,该遍历步骤包括:若所述目标键值对中的值符合第一判断条件或者第二判断条件,则将所述目标报文的JSON路径和目标键值对中的键组成当前JSON路径,将所述目标键值对的值作为当前JSON路径对应的值,加入第二解析结果集。
步骤322:若所述目标报文存在下一位的键值对,则将该下一位的键值对作为新的目标键值对,目标报文保持不变,返回执行所述遍历步骤。
步骤323:若所述目标报文不存在下一位的键值对、该目标报文与第二报文不同并且第二报文存在下一位的键值对,则将所述第二报文的下一位的键值对作为目标键值对,第二报文作为目标报文,返回执行所述遍历步骤。
步骤314:若所述目标报文不存在下一位的键值对、该目标报文与第二报文不同并且第二报文不存在下一位的键值对,则中止当前操作。
步骤325:若所述目标报文为第二报文并且不存在下一位的键值对,则中止当前操作;所述第一判断条件为所述目标键值对的值不是Map类型并且不是列表类型;所述第二判断条件为所述目标键值对的值为列表类型并且列表中的子元素不是Map类型。
为了进一步提高JSON报文比对的准确性,在本申请一个实施例中,步骤311或步骤321中的遍历步骤,还包括:
若所述目标键值对的值为Map类型,则将所述目标键值对的值转化成LinkedHashMap类型后作为新的目标报文,将目标报文的JSON路径和目标键值对中的键组成新的目标报文的JSON路径,将新的目标报文中首位的键值对作为新的目标键值对,返回执行所述遍历步骤。
举例来说,如表1所示,"user_info":{"name":"Big_Cat","age":25,"is_marry":false,"wife":null}表示值为Map类型的键值对。
为了进一步提高JSON报文比对的准确性,在本申请一个实施例中,步骤311或步骤321中的遍历步骤,还包括:
若所述目标键值对的值为列表类型并且列表中的子元素为Map类型,则将所述子元素转化成LinkedHashMap类型后作为新的目标报文,将目标报文的JSON路径和目标键值对中的键组成新的目标报文的JSON路径,将新的目标报文中首位的键值对作为新的目标键值对,返回执行所述遍历步骤。
举例来说,如表1所示,"list_3":[{"sub_map_item":"empty"}]可以表示值为列表类型并且列表中的子元素为Map类型的键值对。
为了进一步提高比对结果列表的可靠性,在本申请一个实施例中,步骤400包含有:根据所述第一解析结果集和第二解析结果集中的当前JSON路径和值,生成比对结果列表并输出。
在一种举例中,生成第一解析结果集或第二解析结果集的过程如下所示,若本举例中的原始JSON报文表示第一JSON报文,则解析结果集可以表示第一解析结果集;若原始JSON报文表示第二JSON报文,则解析结果集可以表示第二解析结果集;具体描述如下:
步骤001:接收原始JSON报文和原始JSON报文,原始JSON报文的JSON路径可以用空字符串""表示,原始JSON报文可以如表1所示。
具体地,如图3所示,服务器和客户端之间通信连接,服务器可以接收客户端发送的原始JSON报文,并将原始JSON报文对应的报文比对结果列表返回至客户端。
步骤002:将原始JSON报文转换为LinkedHashMap类型的Map报文;然后遍历Map报文中的子元素(key:value),报文中的子元素可以相当于上述报文中的键值对,报文中的键key有list_1、list_2、list_3和user_info。
步骤003:遍历第1个子元素("list_1":[]),其中,键key为list_1,值value为[]。由于value是List类型并且大小为0,将原始JSON报文的JSON路径""+list_1作为当前JSON路径,[]作为value存入解析结果集。
步骤004:遍历第2个子元素("list_2":[1,2,3]),其中,key为list_2、value为[1,2,3];由于value是List类型,并且list_2的子元素的类型不为Map类型,将原始JSON报文的JSON路径""+list_2作为当前JSON路径,[1,2,3]作为value存入解析结果集。
步骤005:遍历第3个子元素("list_3":[{...}]),其中,key为list_3,value为[{...}];由于value是List类型,并且list_3的子元素的类型为Map类型;遍历list_3的第1个子元素{"sub_map_item":"empty"},将原始JSON报文的JSON路径""+list_3+第1个子元素的下标0+'.'=list_3[0].作为新的报文对应的JSON路径,{"sub_map_item":"empty"}作为list_3[0].对应的新的报文。
步骤006:将报文{"sub_map_item":"empty"}转换为LinkedHashMap类型的Map报文;然后遍历Map报文的子元素("sub_map_item":"empty");由于("sub_map_item":"empty")中的value是字符串类型,将list_3[0].+sub_map_item=list_3[0].sub_map_item作为当前JSON路径、"empty"作为value存入解析结果集。至此,list_3遍历完毕。
步骤007:遍历第4个子元素("user_info":{...}),其中,key为user_info,value为{...}。
步骤008:由于第4个子元素的value是Map类型;将value转换为LinkedHashMap类型的Map报文,遍历Map报文的子元素,该Map报文的JSON路径为user_info:
首先遍历第1个子元素("name":"Big_Cat"),其中,key为name,value为"Big_Cat"、第1个子元素的JSON路径为user_info.;由于value是字符串类型,所以将user_info.+name=user_info.name作为当前JSON路径、"Big_Cat"作为value存入解析结果集。
然后遍历第2个子元素("age":25),其中,key为age,value为25,第2个子元素的JSON路径为user_info.;由于value是数值类型,所以将user_info.+age=user_info.age作为当前JSON路径,25作为value存入解析结果集。
再遍历第3个子元素("is_marry":false),其中,key为is_marry,value为false;由于value是布尔类型,将user_info.+is_marry=user_info.is_marry作为当前JSON路径,false作为value存入解析结果集。
最后遍历第4个子元素("wife":null),其中,key为wife、value为null;由于value是null,将user_info.+wife=user_info.wife作为当前JSON路径、null作为value存入解析结果集。至此整个报文递归解析完成,得到最终的解析结果集。最终的解析结果集如表2所示。
表2
当前JSON路径 | JSON路径对应的值 |
list_1 | [] |
list_2 | [1,2,3] |
list_3[0].sub_map_item | "empty" |
user_info.name | "Big_Cat" |
user_info.age | 25 |
user_info.is_marry | false |
user_info.wife | null |
具体地,1)若报文中的子元素的value的类型为Map,则将value转换为LinkedHashMap类型的Map报文,遍历Map报文的key-value,根据key-value和新的key={当前报文的JSON路径+key+'.'}返回执行步骤003。
2)若value的类型为List,具体为:
1.若List的大小为0,则中断当前递归,将{当前报文的JSON路径+传入的key}作为当前JSON路径,将空数组作为value存入解析结果集(解析结果集的每一项包含有当前JSON路径及其对应的value值)。
2.若List大小不为0且子元素的类型不为Map,则中断当前递归,将{当前报文的JSON路径+传入的key}作为新的当前JSON路径,将value和新的当前JSON路径存入解析结果集。
3.若List大小不为0且子元素的类型为Map,则遍历Map的子元素,将Map子元素作为新的报文,将{当前报文的JSON路径+传入的key+[i]+'.'}作为新的报文的JSON路径,i表示子元素在List中的位置。
3)若value的类型为字符串、数值、布尔型和null中的一种:则中断当前递归,将{当前报文的JSON路径+传入的key}作为当前JSON路径,将当前JSON路径和value存入解析结果集。
为了进一步提高比对结果列表的可靠性,在本申请一个实施例中,步骤400包括:
步骤410:根据所述第一解析结果集和第二解析结果集中的当前JSON路径和值,生成比对结果列表并输出。
步骤410可以具体包含有:
步骤040:遍历第一解析结果集中的当前JSON路径:
1.若第二解析结果集中不包含此当前JSON路径,则记录:{"第一JSON报文对应值":"XXX","第二JSON报文对应值":null,"comparedResult":"different","remark":"第二解析结果集不包含此字段"}。
2.若第二解析结果集中包含此当前JSON路径并且对应的值不同,则记录:{"第一JSON报文对应值":"XXX","第二JSON报文对应值":"YYY","comparedResult":"different","remark":"字段值不一致"}。
3.若第二解析结果集中包含有此当前JSON路径且对应值一致,则记录:{"第一JSON报文对应值":"XXX","第二JSON报文对应值":"XXX","comparedResult":"same","remark":""}。
4.将上述各个记录存入比对结果列表,并删除第一解析结果集和第二解析结果集中上述记录对应的行数据。
步骤041:在遍历第一解析结果集之后,第一解析结果集中不存在第二解析结果集中的剩余的当前JSON路径,基于第二解析结果集中的剩余的当前JSON路径,记录:{"第一JSON报文对应值":null,"第二JSON报文对应值":"YYY","comparedResult":"different","remark":"第一解析结果集不包含此字段"},存入比对结果列表。
步骤042:将比对结果列表输出至前端。
对比结果列表的格式可以如表3所示。
表3
进一步地,可以采用表格和JSON树两种方式将比对结果列表及相关数据在前端展示;对于表格方式来说,表格可以有5列数据,分别为:字段路径(即当前JSON路径)、第一JSON报文对应值、第二JSON报文对应值、对比结果和备注,可以将每一行根据对比结果用不同颜色显示,提高对比结果的显著程度,数据简单直观,易于增加各种筛选条件、只显示不一致记录等,数据操作性高;对于JSON树方式来说,每个报文对应一个JSON树,因为字段路径包含了完整的字段父子节点关系,所以可以实现从对比结果还原原JSON报文;除了按JSON原结构展示外,叶子节点采用标签的形式,根据不同的对比结果采用不同颜色的标签,可以将对比结果一致的值的下划线用蓝色线表示,对比不一致的值的下划线用红色线表示,若另一报文不存在的当前JSON路径,则将当前JSON路径和其对应值的下划线用橙色线表示,并且标签加上悬浮提示框,用来展示对比的结果详情,当用户鼠标移过该标签便自动展示,可以实现数据图形化,直观展示JSON结构,美观且易于理解各字段间的关系。
表4为本申请一种举例中的第一报文,表5为一种举例中的第二报文,表6为以表格形式展示的表4中的第一报文和表5中的第二报文对应的比对结果列表;表4中的第一报文对应的JSON树示意图如图4所示;表5中的第二报文对应的JSON树示意图如图5所示,图4和图5中对应的值为Map类型的键可以设置于椭圆框内,对应的值为Array类型的键可以设置于圆角矩形框内,其它数据类型的的值及其对应的键可以设置于下划线上,数据类型后加上value:***,表示其对应的值是***;表6、图4和图5可以直观反映第一报文和第二报文的比对结果。
表4
表5
表6
从软件层面来说,为了提高JSON文本比对的准确性,本申请提供一种用于实现所述JSON文本的比对方法中全部或部分内容的JSON文本的比对装置的实施例,参见图6,所述JSON文本的比对装置具体包含有如下内容:
获取模块10,用于获取第一JSON报文和第二JSON报文。
转化模块20,用于将第一JSON报文转化为LinkedHashMap类型的第一报文,并将第二JSON报文转化为LinkedHashMap类型的第二报文。
生成模块30,用于根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集。
比对模块40,用于根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出。
本说明书提供的JSON文本的比对装置的实施例具体可以用于执行上述JSON文本的比对方法的实施例的处理流程,其功能在此不再赘述,可以参照上述JSON文本的比对方法实施例的详细描述。
由上述描述可知,本申请提供的JSON文本的比对方法及装置,能够提高JSON文本比对的准确性;具体地,能够支持复杂多层的JSON报文的比对,提高报文比对的准确性,节省人力成本,并且可以明确各个值对应的详细路径,便于接下来异常分析等;同时,还能够提高报文比对的效率。
图7为本发明一实施例提供的电子设备的实体结构示意图,如图7所示,该电子设备可以包括:处理器(processor)401、通信接口(Communications Interface)402、存储器(memory)403和通信总线404,其中,处理器401,通信接口402,存储器403通过通信总线404完成相互间的通信。处理器401可以调用存储器403中的逻辑指令,以执行如下方法:获取第一JSON报文和第二JSON报文;将第一JSON报文转化为LinkedHashMap类型的第一报文,并将第二JSON报文转化为LinkedHashMap类型的第二报文;根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集;根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出。
此外,上述的存储器403中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:获取第一JSON报文和第二JSON报文;将第一JSON报文转化为LinkedHashMap类型的第一报文,并将第二JSON报文转化为LinkedHashMap类型的第二报文;根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集;根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出。
本实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述各方法实施例所提供的方法,例如包括:获取第一JSON报文和第二JSON报文;将第一JSON报文转化为LinkedHashMap类型的第一报文,并将第二JSON报文转化为LinkedHashMap类型的第二报文;根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集;根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种JSON文本的比对方法,其特征在于,包括:
获取第一JSON报文和第二JSON报文;
将第一JSON报文转化为LinkedHashMap类型的第一报文,并将第二JSON报文转化为LinkedHashMap类型的第二报文;
根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集;
根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出。
2.根据权利要求1所述的JSON文本的比对方法,其特征在于,所述根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集,包括:
根据所述第一报文中的键值对和该键值对中的值的数据类型,生成第一解析结果集;
根据所述第二报文中的键值对和该键值对中的值的数据类型,生成第二解析结果集。
3.根据权利要求2所述的JSON文本的比对方法,其特征在于,所述根据所述第一报文中的键值对和该键值对中的值的数据类型,生成第一解析结果集,包括:
将所述第一报文作为目标报文,将第一报文中的首位的键值对作为目标键值对,执行遍历步骤,该遍历步骤包括:若所述目标键值对中的值符合第一判断条件或者第二判断条件,则将所述目标报文的JSON路径和目标键值对中的键组成当前JSON路径,将所述目标键值对的值作为当前JSON路径对应的值,加入第一解析结果集;
若所述目标报文存在下一位的键值对,则将该下一位的键值对作为新的目标键值对,目标报文保持不变,返回执行所述遍历步骤;
若所述目标报文不存在下一位的键值对、该目标报文与第一报文不同并且第一报文存在下一位的键值对,则将所述第一报文的下一位的键值对作为目标键值对,第一报文作为目标报文,返回执行所述遍历步骤;
若所述目标报文不存在下一位的键值对、该目标报文与第一报文不同并且第一报文不存在下一位的键值对,则中止当前操作;
若所述目标报文为第一报文并且不存在下一位的键值对,则中止当前操作;
所述第一判断条件为所述目标键值对的值不是Map类型并且不是列表类型;所述第二判断条件为所述目标键值对的值为列表类型并且列表中的子元素不是Map类型。
4.根据权利要求2所述的JSON文本的比对方法,其特征在于,所述根据所述第二报文中的键值对和该键值对中的值的数据类型,生成第二解析结果集,包括:
将所述第二报文作为目标报文,将第二报文中的首位的键值对作为目标键值对,执行遍历步骤,该遍历步骤包括:若所述目标键值对中的值符合第一判断条件或者第二判断条件,则将所述目标报文的JSON路径和目标键值对中的键组成当前JSON路径,将所述目标键值对的值作为当前JSON路径对应的值,加入第二解析结果集;
若所述目标报文存在下一位的键值对,则将该下一位的键值对作为新的目标键值对,目标报文保持不变,返回执行所述遍历步骤;
若所述目标报文不存在下一位的键值对、该目标报文与第二报文不同并且第二报文存在下一位的键值对,则将所述第二报文的下一位的键值对作为目标键值对,第二报文作为目标报文,返回执行所述遍历步骤;
若所述目标报文不存在下一位的键值对、该目标报文与第二报文不同并且第二报文不存在下一位的键值对,则中止当前操作;
若所述目标报文为第二报文并且不存在下一位的键值对,则中止当前操作;
所述第一判断条件为所述目标键值对的值不是Map类型并且不是列表类型;所述第二判断条件为所述目标键值对的值为列表类型并且列表中的子元素不是Map类型。
5.根据权利要求3或4所述的JSON文本的比对方法,其特征在于,所述遍历步骤,还包括:
若所述目标键值对的值为Map类型,则将所述目标键值对的值转化成LinkedHashMap类型后作为新的目标报文,将目标报文的JSON路径和目标键值对中的键组成新的目标报文的JSON路径,将新的目标报文中首位的键值对作为新的目标键值对,返回执行所述遍历步骤。
6.根据权利要求3或4所述的JSON文本的比对方法,其特征在于,所述遍历步骤,还包括:
若所述目标键值对的值为列表类型并且列表中的子元素为Map类型,则将所述子元素转化成LinkedHashMap类型后作为新的目标报文,将目标报文的JSON路径和目标键值对中的键组成新的目标报文的JSON路径,将新的目标报文中首位的键值对作为新的目标键值对,返回执行所述遍历步骤。
7.根据权利要求1所述的JSON文本的比对方法,其特征在于,所述根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出,包括:
根据所述第一解析结果集和第二解析结果集中的当前JSON路径和值,生成比对结果列表并输出。
8.一种JSON文本的比对装置,其特征在于,包括:
获取模块,用于获取第一JSON报文和第二JSON报文;
转化模块,用于将第一JSON报文转化为LinkedHashMap类型的第一报文,并将第二JSON报文转化为LinkedHashMap类型的第二报文;
生成模块,用于根据所述第一报文和第二报文,生成第一解析结果集和第二解析结果集;
比对模块,用于根据所述第一解析结果集和第二解析结果集,得到比对结果列表并输出。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至7任一项所述的JSON文本的比对方法。
10.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述指令被执行时实现权利要求1至7任一项所述的JSON文本的比对方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110800666.5A CN113536762A (zh) | 2021-07-15 | 2021-07-15 | Json文本的比对方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110800666.5A CN113536762A (zh) | 2021-07-15 | 2021-07-15 | Json文本的比对方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113536762A true CN113536762A (zh) | 2021-10-22 |
Family
ID=78099438
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110800666.5A Pending CN113536762A (zh) | 2021-07-15 | 2021-07-15 | Json文本的比对方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113536762A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115357286A (zh) * | 2022-08-03 | 2022-11-18 | 中信建投证券股份有限公司 | 一种程序文件对比方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108733689A (zh) * | 2017-04-18 | 2018-11-02 | 北京京东尚科信息技术有限公司 | 一种json文本的比对方法和装置 |
CN111324577A (zh) * | 2018-12-17 | 2020-06-23 | 大唐移动通信设备有限公司 | 一种Yml文件读写的方法及装置 |
CN111880777A (zh) * | 2020-06-23 | 2020-11-03 | 北京三快在线科技有限公司 | 程序信息下发方法、装置、电子设备 |
-
2021
- 2021-07-15 CN CN202110800666.5A patent/CN113536762A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108733689A (zh) * | 2017-04-18 | 2018-11-02 | 北京京东尚科信息技术有限公司 | 一种json文本的比对方法和装置 |
CN111324577A (zh) * | 2018-12-17 | 2020-06-23 | 大唐移动通信设备有限公司 | 一种Yml文件读写的方法及装置 |
CN111880777A (zh) * | 2020-06-23 | 2020-11-03 | 北京三快在线科技有限公司 | 程序信息下发方法、装置、电子设备 |
Non-Patent Citations (1)
Title |
---|
程序员路同学: "JSON对象或JSON数组字符串比较, 最实用的比较策略", pages 1 - 7, Retrieved from the Internet <URL:https://blog.csdn.net/huanglu0314/article/details/108887303> * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115357286A (zh) * | 2022-08-03 | 2022-11-18 | 中信建投证券股份有限公司 | 一种程序文件对比方法、装置、电子设备及存储介质 |
CN115357286B (zh) * | 2022-08-03 | 2023-11-10 | 中信建投证券股份有限公司 | 一种程序文件对比方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3796176A1 (en) | Fault root cause analysis method and apparatus | |
US20180375529A1 (en) | Compression of javascript object notation data using structure information | |
US11003442B2 (en) | Application programming interface documentation annotation | |
CN109460220B (zh) | 报文预定义代码生成方法、装置、电子设备和存储介质 | |
CN107015948B (zh) | 一种日志信息格式化方法及系统 | |
CN106657192B (zh) | 一种用于呈现服务调用信息的方法与设备 | |
CN109145235B (zh) | 用于解析网页的方法、装置及电子设备 | |
US10489024B2 (en) | UI rendering based on adaptive label text infrastructure | |
CN110909168B (zh) | 知识图谱的更新方法和装置、存储介质及电子装置 | |
CN115291967A (zh) | 航天数据分析方法、装置和电子设备 | |
CN114398138B (zh) | 界面生成方法、装置、计算机设备和存储介质 | |
CN113536762A (zh) | Json文本的比对方法及装置 | |
CN112069305B (zh) | 数据筛选方法、装置及电子设备 | |
CN116346961B (zh) | 金融报文处理方法、装置、电子设备及存储介质 | |
CN109857735B (zh) | 一种通过excel进行规则描述的数据构造方法及系统 | |
CN116610558A (zh) | 代码检测方法、装置、电子设备及计算机可读存储介质 | |
CN114296726A (zh) | 一种代码生成方法、装置、计算机设备和存储介质 | |
CN107545008B (zh) | 数据的格式要求存储方法及装置 | |
CN111143643A (zh) | 元素识别方法、装置、可读存储介质和电子设备 | |
CN113992549B (zh) | 一种测试方法、装置、电子设备及存储介质 | |
CN116506291B (zh) | 一种电力系统网络设备配置内容解析方法及装置 | |
CN117056637B (zh) | 无障碍网页生成方法、装置、计算机设备和存储介质 | |
CN115168673B (zh) | 一种数据的图形化处理方法、装置、设备及存储介质 | |
CN115329151B (zh) | 图数据库的优化方法、装置、电子设备及存储介质 | |
JP4082615B2 (ja) | 判定装置、判定方法、及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |