CN110968322B - Json数据的处理方法、装置和电子系统 - Google Patents
Json数据的处理方法、装置和电子系统 Download PDFInfo
- Publication number
- CN110968322B CN110968322B CN201911188279.XA CN201911188279A CN110968322B CN 110968322 B CN110968322 B CN 110968322B CN 201911188279 A CN201911188279 A CN 201911188279A CN 110968322 B CN110968322 B CN 110968322B
- Authority
- CN
- China
- Prior art keywords
- key value
- json
- target
- error information
- check interface
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
- G06F8/4435—Detection or removal of dead or redundant code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
Abstract
本发明提供了一种及一种JSON数据的处理方法、装置和电子系统;该方法包括:如果第一JSON接口接收到JSON数据,将JSON数据反序列化得到映射表;检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息;如果存在错误信息,获取错误信息对应的修正信息;应用修正信息替换JSON数据中的错误信息,得到符合第一校验接口规则表的JSON数据。该方法中,基于第一校验接口规则表中JSON接口对应字段的名称、字段对应的类型、字段的父节点字段、检查函数的类型和检查函数的参数,确定映射表中不符合第一校验接口规则表的错误信息;处理后的JSON数据符合第一校验接口规则表,能够进行数据交互,因此可以减少冗余代码,降低维护成本,兼容其他厂商的系统。
Description
技术领域
本发明涉及数据校验技术领域,尤其是涉及一种JSON数据的处理方法、装置和电子系统。
背景技术
不同厂商的系统之间为了实现的数据交互,需要厂商根据同样的协议建立系统。然而,由于不同厂商对于协议的理解存在偏差,可能出现不同厂商建立的系统中出现代码字段类型不一致、新增字段、删除字段等情况,导致不同厂商的系统代码无法相互对应,无法进行数据交互。
为了解决不同厂商的系统代码无法相互对应的问题,相关技术中一般会针对其他厂商拉取新的代码分支,对其他厂商进行适配的方法,然而这种方法会造成代码冗余,维护成本高、无法兼容其他厂商的系统,并且一旦对接厂商的协议有所修改,代码便需要再次适配。
发明内容
有鉴于此,本发明的目的在于提供一种JSON(JavaScript Object Notation,JavaScript对象表示法)数据的处理方法、装置和电子系统,以减少冗余代码,降低维护成本,兼容其他厂商的系统。
第一方面,本发明实施例提供了一种JSON数据的处理方法,上述方法应用于配有校验接口规则集合的设备,校验接口规则集合包括与每类JSON接口对应的校验接口规则表,校验接口规则表包括至少一个检验接口规则,上述方法包括:如果第一JSON接口接收到JSON数据,将JSON数据反序列化得到映射表;映射表包括至少一个键值对;检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息;如果存在错误信息,获取错误信息对应的修正信息;应用修正信息替换JSON数据中的错误信息,得到符合第一校验接口规则表的JSON数据。
在本发明较佳的实施例中,上述校验接口规则表中的各检验接口规则与该校验接口规则表所对应的JSON接口的各字段一一对应;各检验接口规则包括其所对应字段的名称、其所对应字段的类型、其所对应字段的父节点字段;映射表的每个键值对均对应有父节点;错误信息包括递归错误信息;检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息的步骤,包括:遍历映射表中的键值对,将被遍历到的键值对作为目标键值对,对于每一个目标键值对均执行下述目标键值对检查操作:从第一校验接口规则表中选择目标校验接口规则;目标校验接口规则对应的字段的名称与目标键值对的关键字相同,并且目标校验接口规则对应的字段的父节点字段与目标键值对的父节点字段相同;基于目标校验接口规则和目标键值对中键值确定是否存在目标键值对的递归错误信息。
在本发明较佳的实施例中,上述基于目标校验接口规则和目标键值对中键值确定是否存在目标键值对的递归错误信息的步骤,包括:判断目标键值对中键值的类型与目标校验接口规则的字段对应的类型是否相同;如果不相同,则输出递归错误信息;如果相同,则判断键值的内容是否符合要求;如果不符合要求,则输出递归错误信息。
在本发明较佳的实施例中,上述判断键值的内容是否符合要求的步骤,包括:如果目标键值对中键值的类型为数组,遍历键值中的每个元素,将被遍历到的每个元素作为目标键值对;对于每一个目标键值对执行目标键值对检查操作;如果目标键值对中键值的类型为对象,将键值作为目标键值对;对于目标键值对执行目标键值对检查操作;如果目标键值对中键值的类型为逻辑值、字符串、数字或者空值,目标校验接口规则还包括其对应字段的检查函数的类型和检查函数的参数,调用检查函数确定是否存在目标键值对的递归错误信息。
在本发明较佳的实施例中,上述错误信息还包括覆盖率错误信息;检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息的步骤,还包括:遍历第一校验接口规则表中的校验接口规则,将被遍历到的校验接口规则作为目标校验接口规则,对于每一个目标校验接口规则均执行下述操作:统计目标校验接口规则的第一选择次数,并判断第一选择次数是否为0;其中,如果第一校验接口规则表中的校验接口规则被当作了目标检验接口规则,对于第一选择次数加1;如果为0,则输出覆盖率错误信息;如果不为0,则统计每一个与目标校验接口规则具有相同的父节点字段的校验接口规则的第二选择次数,判断每一个第二选择次数是否与第一选择次数相同;如果存在于第一选择次数不相同的第二选择次数,则输出覆盖率错误信息。
在本发明较佳的实施例中,上述检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表表的错误信息的步骤,还包括:如果目标键值对中的关键字与第一校验接口规则表的各个校验接口规则中的字段名称均不同,输出错误信息。
在本发明较佳的实施例中,上述校验接口规则还包括:JSON接口的字段必要属性;字段必要属性包括可选字段和必要字段;映射表的每个键值对均对应一个必要属性;检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息的步骤,还包括:如果目标键值对对应的必要属性与目标校验接口规则的字段必要属性不同,输出错误信息。
在本发明较佳的实施例中,上述校验接口规则还包括:JSON接口的层级;检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息的步骤,还包括:获取目标键值对对应的层级;如果目标键值对对应的层级与目标校验接口规则的层级不同,输出错误信息。
在本发明较佳的实施例中,在得到符合第一校验接口规则表的JSON数据的步骤之后,上述方法还包括:提取JSON数据中的图片数据,将图片数据发送至第一存储设备;提取JSON数据中的JSON对象数据,将JSON对象数据发送至第二存储设备。
在本发明较佳的实施例中,上述提取JSON数据中的图片数据,将图片数据发送至第一存储设备的步骤,包括:遍历映射表中的键值对,将被遍历到的键值对作为目标键值对,对于每一个目标键值对均执行下述图片数据存储操作:判断目标键值对中键值的类型;如果目标键值对中键值的类型为数组,则判断目标键值对的关键字是否等于预设的图片数据关键字;如果等于,则对数组中的各个元素进行处理,把处理所得的子图数据发送至第一存储设备,记录图片ID和存储结果并退出本次遍历;存储结果用于表明是否存储成功;如果不等于,则将数组中的各个元素依次作为目标键值对;对于每一个目标键值对执行图片数据存储操作;如果目标键值对中键值的类型为对象,则将目标键值对中的键值作为目标键值对,对于目标键值对执行图片数据存储操作。
在本发明较佳的实施例中,上述提取JSON数据中的JSON对象数据,将JSON对象数据发送至第二存储设备的步骤,包括:遍历映射表中的键值对,将被遍历到的键值对作为目标键值对,对于每一个目标键值对均执行下述JSON对象数据存储操作:判断目标键值对中键值的类型;如果目标键值对中键值的类型为数组,则判断目标键值对的关键字是否等于预设的JSON对象数据关键字;如果等于,则对数组中的各个元素进行处理,把处理所得的子JSON对象数据发送至第二存储设备,记录JSON对象数据ID和存储结果并退出本次遍历;存储结果用于表明是否存储成功;如果不等于,则将数组中的各个元素依次作为目标键值对;对于每一个目标键值对执行JSON对象数据存储操作;如果目标键值对中键值的类型为对象,则将目标键值对中的键值作为目标键值对,对于目标键值对执行JSON对象数据存储操作。
在本发明较佳的实施例中,上述方法还包括:将符合第一校验接口规则表的JSON数据,按照预先设定的模板文件转换为通用数据。
第二方面,本发明实施例还提供一种JSON数据的处理装置,上述装置应用于配有校验接口规则集合的设备,校验接口规则集合包括与每类JSON接口对应的校验接口规则表,校验接口规则表包括至少一个检验接口规则,上述装置包括:JSON数据接收模块,用于如果第一JSON接口接收到JSON数据,将JSON数据反序列化得到映射表;映射表包括至少一个键值对;错误信息检查模块,用于检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息;修正信息获取模块,用于如果存在错误信息,获取错误信息对应的修正信息;修正信息替换模块,用于应用修正信息替换JSON数据中的错误信息,得到符合第一校验接口规则表的JSON数据。
第三方面,本发明实施例还提供一种电子系统,电子系统包括:数据采集设备、处理设备和存储装置;数据采集设备,用于获取JSON数据;存储装置上存储有计算机程序,计算机程序在被处理设备运行时执行如上述JSON数据的处理方法。
第四方面,本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理设备运行时执行如上述JSON数据的处理方法的步骤。
本发明实施例带来了以下有益效果:
本发明实施例提供了一种JSON数据的处理方法、装置和电子系统,对于每类JSON接口配置对应的校验接口规则表,校验接口规则表包括与每类JSON接口对应的校验接口规则。该方法中,对于第一JSON接口接收到的JSON数据,经过反序列化得到包括至少一个键值对的映射表,之后确定映射表中不符合第一校验接口规则表的错误信息,获取错误信息的对应的修正信息以替换修正信息,得到处理后的JSON数据;处理后的JSON数据符合第一校验接口规则表,是相互对应的,能够进行数据交互,因此可以减少冗余代码,降低维护成本,兼容其他厂商的系统,不会因为数据不对应导致系统崩溃。
本公开的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本公开的上述技术即可得知。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种电子系统的结构示意图;
图2为本发明实施例提供的一种JSON数据的处理方法的流程图;
图3为本发明实施例提供的另一种JSON数据的处理方法的流程图;
图4为本发明实施例提供的一种映射表的结构示意图;
图5为本发明实施例提供的一种JSON数据多厂商兼容方案示意图;
图6为本发明实施例提供的一种JSON数据的处理装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了解决现有的JSON数据处理方法会造成代码冗余,维护成本高、无法兼容其他厂商的系统,并且一旦对接厂商的协议有所修改,代码便需要再次适配的问题,本发明实施例提供了一种JSON数据的处理方法、装置和电子系统,该技术可以应用于服务器、计算机、相机、手机、平板电脑等多种设备中,该技术可采用相应的软件和硬件实现,以下对本发明实施例进行详细介绍。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种JSON数据的处理方法进行详细介绍。
实施例一:
首先,参照图1来描述用于实现本发明实施例的JSON数据的处理方法、装置和电子系统的示例电子系统100。
如图1所示的一种电子系统的结构示意图,电子系统100包括一个或多个处理设备102、一个或多个存储装置104、输入装置106、输出装置108以及一个或多个数据采集设备110,这些组件通过总线系统112和/或其它形式的连接机构(未示出)互连。应当注意,图1所示的电子系统100的组件和结构只是示例性的,而非限制性的,根据需要,电子系统也可以具有其他组件和结构。
处理设备102可以为智能终端,或者是包含中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元的设备,可以对电子系统100中的其它组件的数据进行处理,还可以控制电子系统100中的其它组件以执行目标对象统计的功能。
存储装置104可以包括一个或多个计算机程序产品,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理设备102可以运行程序指令,以实现下文的本发明实施例中(由处理设备实现)的客户端功能以及/或者其它期望的功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据,例如应用程序使用和/或产生的各种数据等。
输入装置106可以是用户用来输入指令的装置,并且可以包括键盘、鼠标、麦克风和触摸屏等中的一个或多个。
输出装置108可以向外部(例如,用户)输出各种信息(例如,图像或声音),并且可以包括显示器、扬声器等中的一个或多个。
数据采集设备110可以采集JSON数据,并且将采集到的JSON数据存储在存储装置104中以供其它组件使用。
示例性地,用于实现根据本发明实施例的JSON数据的处理方法、装置和电子系统中的各器件可以集成设置,也可以分散设置,诸如将处理设备102、存储装置104、输入装置106和输出装置108集成设置于一体,而将数据采集设备110设置于可以采集到图片的指定位置。当上述电子系统中的各器件集成设置时,该电子系统可以被实现为诸如相机、智能手机、平板电脑、计算机等智能终端。
实施例二:
本实施例提供了一种JSON数据的处理方法,该方法应用于配有校验接口规则的设备,校验接口规则包括与每类JSON接口对应的校验接口规则表,校验接口规则表包括至少一个检验接口规则。
JSON是一种轻量级的数据交换格式,JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。这些特性使JSON成为理想的数据交换语言,常用作前后端数据交换。厂商根据协议编辑JSON数据,而校验接口规则表规定了JSON接口对应的校验接口规则,即JSON接口在使用校验接口规则表的时候,需要先从校验接口规则表中选择合适的校验接口规则,然后采用被选择的校验接口规则进行校验。
基于上述描述,如图2所示的一种JSON数据的处理方法的流程图,该JSON数据的处理方法包括如下步骤:
步骤S202,如果第一JSON接口接收到JSON数据,将上述JSON数据反序列化得到映射表;上述映射表包括至少一个键值对。
按照厂商遵循的协议的规定,JSON数据会分为不同的接口传输,例如:在《GAT1400.4-2017公安视频图像信息应用系统》(下简称GA1400)中,采集设备/采集系统会向视频图像信息数据库上传人脸、人员、机动车、非机动车、场景、物品、案事件、视频图像标签、视频片段、图像、文件等11类的视频图像信息对象,每一种类型通过各自的接口上传。
每一个接口都会在代码中进行校验,本实施例仅以其中一个接口(第一JSON接口)为例。在第一JSON接口接收到JSON数据后,需要将JSON数据反序列化,反序列是指把字节序列恢复为对象的过程,反序列化后可以得到一个映射表(map),map中会包括至少一个键值对,通过<k,v>的形式表示键值对,k就是map的关键字(key),v就是键值(value)。
步骤S204,检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息。
对于一个map,需要通过与第一JSON接口对应的第一校验接口规则表检测map中全部的k值和v值是否符合规则,如果map存在不符合第一校验接口规则表的情况,就需要输出错误信息。错误信息需要指出哪些k值或v值不符合第一校验接口规则表的哪一条规则,如果map符合第一校验接口规则表,会输出值为空值(nil)的错误信息。
步骤S206,如果存在错误信息,获取上述错误信息对应的修正信息。
存在错误信息时,需要获取针对该错误信息的修正信息,修正信息用于修改JSON数据,修改后的JSON数据符合第一校验接口规则表,修正信息可以由用户根据错误信息手动输入,或者系统根据错误信息输出对应的修正信息。
步骤S208,应用修正信息替换上述JSON数据中的错误信息,得到符合第一校验接口规则表的JSON数据。
错误信息指出了JSON数据中不符合第一校验接口规则表的部分,需要使用修正信息替换上述部分,替换后的JSON数据符合第一校验接口规则表。
本发明实施例提供了一种JSON数据的处理方法,对于每类JSON接口配置对应的校验接口规则表,校验接口规则表包括与每类JSON接口对应的校验接口规则。
该方法中,对于第一JSON接口接收到的JSON数据,经过反序列化得到包括至少一个键值对的映射表,之后确定映射表中不符合第一校验接口规则表的错误信息,获取错误信息的对应的修正信息以替换修正信息,得到处理后的JSON数据;处理后的JSON数据符合第一校验接口规则表,处理后的不同JSON数据符合同样的规则,能够进行数据交互,因此可以减少冗余代码,降低维护成本,兼容其他厂商的系统,不会因为数据不对应导致系统崩溃。
实施例三:
本实施例提供了另一种JSON数据的处理方法,该方法在上述实施例的基础上实现;本实施例重点描述检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息的具体过程。本实施例中的错误信息包括递归错误信息和覆盖率错误信息;其中,递归错误信息通过递归流程确定,用于确定JSON数据是否符合校验接口规则。
本实施例中的校验接口规则表中的各检验接口规则与该校验接口规则表所对应的JSON接口的各字段一一对应。在接收到JSON接口发送的JSON数据后,提取JSON接口的字段,并选择与被提取的JSON接口的字段相对应的校验接口规则表,这里需要说明的是,JSON数据的字段和其接口的字段是一样的。
各检验接口规则包括其所对应字段的名称、其所对应字段的类型、其所对应字段的父节点字段。其中,字段的名称(Key)即协议中定义的字段名称;字段对应的类型(Type)即协议对该字段的类型定义,不同厂商可能存在部分差异;字段的父节点字段(Parent)也就是字段的上级,这里的父节点是指Key在JSON中的上级,不排除不同的厂商对协议的理解,因此需要定义该字段;检查函数是对JSON字段进行检查的函数,检查函数根据类型和参数确定;检查函数的类型(FuncType)是用于检查参数的函数的类型,这是一个枚举值,在程序中会将该值映射到一个类型的检查函数;检查函数的参数(FuncArgs):为一个interface{},表示可以是任意类型的任意数据。除了默认提供的若干个检查函数外,还可以由API(Application Programming Interface,应用程序接口)供用户添加自定义的检查函数。
按照厂商遵循的协议的规定,JSON数据会分为不同的接口传输,需要对于每一个类对象构建一个结构体,例如,以GA1400为例,可以定义两个结构体FaceList和PersonList,分别用于接收人脸数据和人员数据。针对GA1400就需要构建11种结构体,这些结构体具有较多的同名字段,但是关键的字段例如名称(ID)却是不同的名字。FaceList和PersonList可以如表1所示:
表1
为了确保上传的内容可以互相对应,比方说必要字段(R字段)必须有值,且符合规范(比如数值的类型、长度符合规范),那么,针对人脸接口,开发人员需要在代码中进行字段校验;另外,针对人员、机动车、非机动车等其他接口,开发人员也需要进行类似的字段校验。
基于上述描述,如图3所示的另一种JSON数据的处理方法的流程图,本实施例中的JSON数据的处理方法包括如下步骤:
步骤S302,如果第一JSON接口接收到JSON数据,将上述JSON数据反序列化得到映射表;上述映射表包括至少一个键值对。
映射表的结构可以参见图4所示的一种映射表的结构示意图,如图4所示,反序列化后的映射表是一种类似“套娃”的形式,即从第一层开始,每一层映射表的键值对的键值可以是数值,也可以是键值对;例如:第一层的键值对<k1,v1>中,关键字k1对应的键值v1是一个键值对<k2,v2>,而键值v2由键值对<k3,v3>、<k4,v4>、<k5,v5>、<k6,v6>和<k7,v7>组合而成;其中,键值v7是一个键值对<k8,v8>,而键值v8由键值对<k9,v9>至<k17,v17>组合而成。
默认的JSON数据只支持以下6种类型:(1)bool,for JSON booleans,即布尔值,逻辑值;(2)float64,for JSON numbers,即数字,包括整数、浮点数;(3)string,for JSONstrings,即字符串;(4)[]interface{},for JSON arrays,即数组;(5)map[string]interface{},for JSON objects,即JSON的对象;(6)nil,for JSON null,即空值。
在序列化之前如果不知道JSON数据格式,我们使用interface{}(任意类型)来存储。key是string,value是存储在interface{}内的。想要获得反序列化所得映射表中的键值对中的数据,需要进行range迭代和类型断言,具体通过步骤A1-步骤A2执行:
步骤A1,通过range迭代确定map中的键值对;
range迭代是对一个数组、map等数据结构进行遍历,本实施例中指的是对map进行遍历。range迭代遍历map得到的是键值对<k,v>结果,k就是map的关键字,v就是这个键的键值。
步骤A2,通过类型断言确定键值对中键值的类型。
类型断言(Type Assertion)用于确定数据的类型。可以通过表2的代码反序列化得到映射表map:
表2
JSON反序列化为map后,一个JSON数据,也即一个JSON对象,就是被转化为了一个map。
map里的关键字key如果是array,就代表value是一个数组,这个数组的每个元素都是一个JSON对象(map);map里的key如果是node(object),就代表键值value是一个JSON对象(map)。
步骤S304,遍历映射表中的键值对,将被遍历到的键值对作为目标键值对,对于每一个目标键值对均执行下述目标键值对检查操作:
为了使系统能够兼容不同厂商的系统的差异,并且能对协议的各个R、R/O字段(R即必要字段,O即可选字段)进行有效的检查,需要对映射表map中的每一个键值对<k,v>进行校验,因此,需要遍历map中的<k,v>,对于每一个<k,v>均执行下述操作:
步骤S306,从第一校验接口规则表中选择目标校验接口规则;上述目标校验接口规则对应的字段的名称与目标键值对的关键字相同,并且目标校验接口规则对应的字段的父节点字段与目标键值对的父节点字段相同。
一条校验接口规则需要至少包括JSON接口对应字段的名称、字段对应的类型、字段的父节点字段、检查函数的类型和检查函数的参数这五种参数,可以通过表3代码表示:
表3
JSON数据反序列化得到的映射表的每个键值对均对应有父节点;一开始这个父节点是空值,当递归到node时,这时候下一层的递归父节点就是这个node的k值。对于一个接口,首先需要获取该接口对应的第一校验接口规则表,并基于字段的名称与<k,v>中与k相同和字段的父节点字段与<k,v>的父节点字段相同确定目标检验接口规则。这里需要说明的是,校验接口规则表可以直接写入JSON数据的代码中,也可以通过配置文件另外调用。以人脸接口为例,检验规则表可以如表4所示:
表4
步骤S308,基于目标校验接口规则和目标键值对中键值确定目标键值对的递归错误信息。
确定递归错误信息的流程即递归流程,在递归流程前,已经对JSON数据反序列化,反序列化可以将空的JSON数据或非法的JSON数据过滤掉。递归流程的输入共3个参数:反序列化得到的map,记作m,以及检验规则表,记作c,以及父节点p,如果p为空字符串,表示从JSON的“根节点”进行递归。输出包括:详细的错误信息err和符合协议(例如GA1400)标准的键值映射表r。如果没有错误,错误信息err为nil,即空值;如果出现无法修正的错误时,输出的键值映射表r=nil,表示这个JSON数据无法被处理成标准数据。具体的错误信息输出流程可以通过步骤B1-步骤B4执行:
步骤B1,判断目标键值对中键值的类型与目标校验接口规则的字段对应的类型是否相同;
采用遍历的方法逐层确定递归错误信息,首先需要判断<k,v>的k值类型与目标校验接口规则的字段对应的类型是否相同,如果相同,则继续确定递归错误信息;如果不相同,则输出错误信息。
具体来说,遍历m,即通过range迭代进行遍历,得到<k,v>值,k就是map的关键字,这里就是校验字段的名称,v就是键值;针对当前的k值,到第一校验接口规则列表c获取一个目标校验接口规则,记作rule。如果获取到的规则rule为nil,即表明该字段无需检查,则继续遍历;否则,进行类型检查。
通过校验接口规则获取函数从c中确定rule,校验接口规则获取函数的输入为第一校验接口规则列表c,字段名称k,该字段的父节点p;输出为目标校验接口规则v。具体方法是遍历第一校验接口规则列表c,如果找到字段名称和k相等且字段的父节点也相等的校验接口规则,则将该规则命中次数加1,然后该规则作为目标接口规则返回;否则,返回nil。可以通过表5的代码实现:
表5
步骤B2,如果不相同,则输出递归错误信息;
如果不相同,则说明目标键值对中键值的类型需要修改,输出递归错误信息。
步骤B3,如果相同,则判断键值的内容是否符合要求。
如果目标键值对中键值的类型符合目标校验接口规则的要求,就需要根据目标校验接口规则判断键值的内容是否符合要求,具体来说,判断采用递归的方法,即先对目标键值对的键值的第一层进行判断,之后对目标键值对的键值的第二层进行判断,依此类推。这里以目标键值对的类型进行递归,具体的递归步骤可以通过步骤C1-步骤C3执行:
步骤C1,如果目标键值对中键值的类型为数组,遍历键值中的每个元素,将被遍历到的每个元素作为目标键值对;对于每一个目标键值对执行目标键值对检查操作。
如果v的类型是[]interface{},说明v是数组,则需要针对其每个元素e进行递归,即将e作为目标键值对,执行步骤S306-S308的目标键值对检查操作,这个递归的输入为(e,c,p),p=k(即下一层的递归父节点是本节点的k值)。如果某个递归返回了错误信息,则把错误信息返回。
步骤C2,如果目标键值对中键值的类型为对象,将键值作为目标键值对;对于目标键值对执行目标键值对检查操作。
如果v的类型是map[string]interface{},说明v是对象,则即将v作为目标键值对,执行步骤S306-S308的目标键值对检查操作,对v进行递归,这个递归的输入(v,c,p),p=k(即下一层的递归父节点是本节点的k值)。如果该递归返回了错误信息,则把错误信息返回。
步骤C3,如果目标键值对中键值的类型为逻辑值、字符串、数字或者空值,目标校验接口规则还包括其对应字段的检查函数的类型和检查函数的参数,调用检查函数确定是否存在目标键值对的递归错误信息。
如果目标键值对中键值的类型为逻辑值、字符串、数字或者空值,需要依据检查函数判断是否符合要求。在目标校验接口规则中包括了检查函数的类型和检查函数的参数,根据检查函数的类型和检查函数的参数调用检查函数,并依据调用的检查函数判断是否符合要求。
也就是说,对于其他情况(v的类型是逻辑值bool,字符串string,数字float64,空值nil),对v按照规则进行检查。如果某个字段校验返回了错误信息,则把错误信息返回。具体来说,判断校验接口规则的字段类型rule.Type,和v真实的类型是否相同,如果不同,返回错误,错误详细描述了类型不同的原因;如果相同,进入下一步;获取校验接口规则的函数类型rule.FuncType,这是一个枚举值,获取函数参数rule.FuncArgs。程序内部预先定义了一些类型的检查函数,通过函数映射表funcMap,将函数类型rule.FuncType映射到特定类型的检查函数cb;调用上述检查函数cb,cb的参数为v和rule.FuncArgs。对cb的返回值进行判断,如果有错误信息,将错误信息返回;否则,继续执行遍历的操作。例如,以string为例:可以通过表6中所示的代码及进行检查:
表6
另外需要说明的是,校验接口规则中的检查函数的类型可以包括:(1)FuncNone=0//不检查字段;(2)FuncStringSize=1//检查字符串的长度是否等于给定值f(x,n);(3)FuncFloatRange=2//检查浮点数在某一个范围内f(x,a1,a2);(4)FuncEnumCheck=3//检查字段值取值是否是给定的枚举值f(x,e1,e2,e3...);(5)FuncSizeMinMax=4//检查字符串长度是否在指定的范围f(x,n1,n2);(6)FuncSizeEnum=5//检查字符串的长度是取给定的枚举值f(x,e1,e2,e3)。
校验接口规则中的类型(Type)可以包括:(1)TypeBool="bool"//对应于JSON的bool;(2)TypeNumber="number"//对应于JSON的float64;(3)TypeString="string"//对应于JSON的string;(4)TypeArray="array"//对应于JSON的[]interface{};(5)TypeNode="node"//对应于JSON的map[string]interface{}。
步骤B4,如果不符合要求,则输出递归错误信息。
重复上述步骤S306-S308(其中步骤S308包括步骤B1-B4,步骤B3包含步骤C1-步骤C3之一)以进行遍历,直至校验完成,返回校验过程中出现的递归错误信息,没有递错误信息则返回nil。
以表1所示的人脸上传接口的格式-FaceList为例,采用表4所示的校验接口规则表,输入参数为(m,c,p),m即反序列化得到的map,c即代表校验接口规则表,p为空值。共有三层递归,具体递归如下:
第1层递归:遍历m,当前k=FaceListObject(即表1的第1行数据);获取校验接口规则成功,rule={FaceListObject,node,空值,0,0},即表4的第1行数据;判断v的类型是map[string]interface{},节点类型rule.Type等于node,类型校验通过,进入第2层递归,参数变为(v,c,p),p=k=FaceListObject。
第2层递归:遍历m,当前k=FaceObject(即表1的第2行数据);获取校验接口规则成功,rule={FaceObject,array,FaceListObject,0,0},即表4的第2行数据;判断v的类型是[]interface{},节点类型rule.Type等于array,类型校验通过,遍历v的每个元素e(array类型的v包括"FaceID"、"InfoKind"、"SourceID"、"DeviceID"、"SubImageList"5个元素),进入第3层递归,参数变为(e,c,p),p=k=FaceObject。以下仅以e为"FaceID"展示第3层递归。
第3层递归:遍历m,当前k=FaceID;获取校验接口规则成功,rule={FaceID,string,FaceObject,1,48},即表1的第3行数据;判断v的类型是string,节点类型rule.Type等于string,类型校验通过,进入字段校验,此时rule.FuncType=4,对应的函数为“检查字符串的长度是否等于给定值f(x,n)”,这时v=FaceID(这里是字段的值,而非字段名称)和rule.FuncArgs=48被作为参数传入到函数进行处理,该函数检查发现v=FaceID的长度是6,不满足条件,于是字段校验失败,返回错误信息。这时递归函数逐层向外返回。
此外,检查函数可以由用户自定义,用户只需要调用API即可添加一个自定义类型的检查函数。这个类型的检查函数就会被添加到函数映射表。例如,现在新增一个funcType=7,对应类型的检查函数叫做StringCheck,可以实现检查字符串是否只包含数字的功能。用户调用AddFunc(7,StringCheck),就向函数映射表添加了该类型的校验函数,其对应的检查函数类型枚举值为7。那么,当读取到校验接口规则rule,rule.FuncType=7时,就会被映射到用户自定义的函数,进行字符串校验。
该方式中,递归流程首先根据k值的类型确定目标校验接口规则,而后根据v值的类型的不同,采用递归的方法判断v值的内容是否符合符合要求,以实现对m的遍历并输出错误信息。
错误信息除了递归错误信息之外,还包括覆盖率错误信息。覆盖率错误信息通过覆盖率检查流程确定,用于检查JSON数据里相同层级的必要字段(R字段)命中次数(也就是校验次数)是否一样。
对覆盖率错误信息进行校验的目的是保证JSON数据中各字段都出现了相同次数,保证没有缺失的字段,即一个JSON数据中的不同类型的R字段的出现次数相同,可以通过步骤D1-步骤D5执行:
步骤D1,遍历第一校验接口规则表中的校验接口规则,将被遍历到的校验接口规则作为目标校验接口规则,对于每一个目标校验接口规则均执行下述操作:
覆盖率检查流程可以在完成递归流程后执行,如果递归检查不通过,直接返回递归错误信息;如果递归检查通过,则执行覆盖率检查流程。遍历第一校验接口规则表中的全部校验接口规则,将被遍历到的校验接口规则作为目标校验接口规则,通过下述方法对目标校验接口规则进行覆盖率检查。
步骤D2,统计目标校验接口规则的第一选择次数,并判断第一选择次数是否为0;其中,如果第一校验接口规则表中的校验接口规则被当作了目标检验接口规则,对于第一选择次数加1。
统计目标校验接口规则的命中次数作为第一选择次数,即第一校验接口规则表中的校验接口规则每被当作一次目标检验接口规则,则该目标检验接口规则的命中次数(即第一选择次数)加1。
步骤D3,如果为0,则输出覆盖率错误信息。
遍历规则列表,如果当前规则r的命中次数(Count字段)为0,表示没有覆盖到这一个规则,返回错误信息,否则转下一步。
步骤D4,如果不为0,则统计每一个与目标校验接口规则具有相同的父节点字段的校验接口规则的第二选择次数,判断每一个第二选择次数是否与第一选择次数相同。
对于具有相同父节点的校验接口规则需要保证命中次数相同,如果不同,则说明出现覆盖率错误,输出覆盖率错误信息。也就是遍历规则列表,检查具有和r相同上级(Parent字段相同)的规则r0的命中次数(Count字段)是否和r的命中次数相同。
步骤D5,如果存在于第一选择次数不相同的第二选择次数,则输出覆盖率错误信息。
如果第二选择次数与第一选择次数不同,返回错误信息;否则继续遍历,直至全部规则被遍历完毕。全部规则被遍历完毕后将每条规则的命中计数器Count为0,并输出覆盖率错误信息。
该方式中,覆盖率检查流程根据第一JSON接口对应的校验接口规则表中每条校验接口规则的选择次数的不同确定是否存在覆盖率错误,如果具有相同父节点的校验接口规则选择次数不同,则存在覆盖率错误,输出覆盖率错误信息。
可以理解的是,对覆盖率错误信息进行校验的目的可以是保证JSON数据中必要字段都出现了相同次数,保证没有缺失的必要字段,而对可选字段不做要求。在这种情况下,无需遍历第一校验接口规则表中的所有校验接口规则,只需遍历第一校验接口规则表中的必要字段对应的校验接口规则即可。字段是必要的还是可选的用字段的必要属性表示,将在后文做进一步说明。
在一例中,检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息的步骤,还包括:
如果目标键值对中的关键字与第一校验接口规则表的各个校验接口规则中的字段名称均不同,输出错误信息。
校验接口规则中的字段名称还用于处理厂商的JSON字段名字和协议的字段名称不一致的问题,例如,厂商把字段FaceListObject误写成FacesListObject,由于第一校验接口规则表的校验接口规则中只有FaceListObject而没有FacesListObject,目标键值对中的关键字与第一校验接口规则表的各个校验接口规则中的字段名称均不同,此时需要输出错误信息。
又例如,校验接口规则还包括:JSON接口的字段必要属性;字段必要属性包括可选字段和必要字段;映射表的每个键值对均对应一个必要属性;上述检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息的步骤,还包括:如果目标键值对对应的必要属性与目标校验接口规则的字段必要属性不同,输出错误信息。
字段必要属性用于处理有的厂商将协议的O字段(可选字段)强制处理为R字段(必要字段)字段等情况。因此,需要校验目标键值对对应的必要属性与第一校验接口规则表规定的字段必要属性是否一致,如果不一致,输出错误信息。
又例如,校验接口规则还包括:JSON接口的层级;上述检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息的步骤,还包括:获取目标键值对对应的层级;如果目标键值对对应的层级与目标校验接口规则表的层级不同,输出错误信息。
目标键值对对应的层级可以根据递归的层数获得。如果某目标键值对通过1层递归访问到,则其层级可以为1级,如果某目标键值对通过3层递归访问到,则其层级可以为3级。
层级用于处理厂商的JSON数据包的层次比协议规定的少的情况,即“层级丢失”。因此,需要确定目标键值对对应的层级与目标校验接口规则的层级是否一致,如果不一致,输出错误信息。例如,目标键值对对应的层级为第二级,而目标校验接口规则的层级为第三级,则说明存在了层级丢失,需要输出错误信息。
步骤S310,如果存在错误信息,获取上述错误信息对应的修正信息。
修正信息可以保存在符合协议(例如GA1400)标准的键值映射表r中。对于可以被修正的错误信息,例如字段名称不对、新增字段、删除字段、层级错误等错误,将输入的映射表m进行校正,得到输出的映射表r,作为递归流程的输出之一。其中,修正信息可以根据键值映射表r获得。
步骤S312,应用修正信息替换上述JSON数据中的错误信息,得到符合第一校验接口规则表的JSON数据。
在完成JSON数据的校验之后,还可以将JSON数据中的图片数据和对象数据保存在存储设备中,并记录保存位置,以方便其他厂商调用被保存的数据,实现数据兼容,参见图5所示的一种JSON数据多厂商兼容方案示意图,如图5所示,可以将JSON数据中的图片数据和对象数据保存在标准数据存储池中待其他厂商需要时对需要的数据进行数据转换,将数据转换为符合相应厂商模版的数据。将JSON数据中的图片数据和对象数据保存的步骤可以通过步骤E1-步骤E2执行;
步骤E1,提取JSON数据中的图片数据,将图片数据发送至第一存储设备。第一存储设备可以是SeaweedFS(文件存储器),这里的图片数据,相当于表1中的“SubImageInfoObject”,存储和记录图像数据的流程可以通过步骤F1执行。
F1:遍历映射表中的键值对,将被遍历到的键值对作为目标键值对,对于每一个目标键值对均执行下述图片数据存储操作。
在实际中,通过调用图片数据存储操作函数来执行图片数据存储操作,调用图片数据存储操作函数时,输入(result,当前目标键值对,预设图片存储地址),图片数据存储操作函数执行完毕更新result作为输出。result是一个映射表,初始值为空。
F11:判断目标键值对中键值的类型;
F111:如果目标键值对中键值的类型为数组,则判断目标键值对的关键字是否等于预设的图片数据关键字。
由表1、表4可见,“SubImageInfoObject”是JSON数据包中的字段,根据GA1400协议,该字段是数组类型,代表一个图片对象,它可能包含多个子图,每个子图包含以base64编码的图片数据。因此,若想对图片数据进行处理,需要找到类型是数组且关键字为“SubImageInfoObject”的键值对。
F1111:如果等于,则对数组中的各个元素进行处理,把处理所得的子图数据发送至第一存储设备,记录图片ID和存储结果并退出本次遍历;存储结果用于表明是否存储成功。
如果等于,则找到了图片数据所在的键值对。对该键值对的键值为包含N个元素的数组(N大于等于1,表1中只示出了包含1个元素的情况),数组的元素是对象类型,每个元素对应一张子图的信息。对于每个对象类型的元素,其包含的"ImageID"是图片ID,"Data"是所要存储的子图数据。对数组中的各个元素进行处理,是指提取出"ImageID"和"Data"中的内容。
此外,将子图数据发送至第一存储设备后,会将该子图的base64字符串即"Data"对应的键值置为空值,避免在E2步骤把JSON数据存储到全文搜索引擎,全文搜索引擎不存图片数据。
存储成功时为存储结果为0,存储失败时,存储结果为错误码。将图片ID和存储结果分别作为关键子和键值形成结果键值对。每存储完一张子图,就在result中增加一个结果键值对,得到更新的result。
F1112:如果不等于,则将数组中的各个元素依次作为目标键值对;对于每一个目标键值对执行图片数据存储操作。
如果目标键值对的键值的类型是数组,但关键字不是“SubImageInfoObject”,则对应接口中其他字段。例如对于人脸接口,则对应"FaceObject"字段。
F112:如果目标键值对中键值的类型为对象,则将目标键值对中的键值作为目标键值对,对于目标键值对执行图片数据存储操作。
该方式中,将图片数据存储到第一存储设备的指定位置path1,并保存图片ID和存储结果。
步骤E2,提取JSON数据中的JSON对象数据,将JSON对象数据发送至第二存储设备。
这里的JSON对象数据相当于表1中的“FaceObject”,“PersonObject”等。存储和记录JSON对象数据的流程可以通过步骤G1执行:
G1:遍历映射表中的键值对,将被遍历到的键值对作为目标键值对,对于每一个目标键值对均执行下述JSON对象数据存储操作:
在实际中,通过调用JSON对象数据存储操作函数来执行JSON对象数据存储操作,调用JSON对象数据存储操作函数时,输入(result,当前目标键值对,预设JSON对象存储地址),JSON对象数据存储操作函数执行完毕更新result作为输出。result是一个映射表,初始值为空。
G11:判断目标键值对中键值的类型;
G111:如果目标键值对中键值的类型为数组,则判断目标键值对的关键字是否等于预设的JSON对象数据关键字;
由表1、表4可见,“FaceObject”和“PersonObject"是JSON数据包中的字段,根据GA1400协议,该字段是数组类型,代表一个JSON对象,它可能包含多个子JSON对象数据,每个子JSON对象包含以base64编码的JSON对象数据。因此,若想对JSON对象数据进行处理,需要找到类型是数组且关键字为“FaceObject”或“PersonObject"的键值对。
G1111:如果等于,则将数组中的各个元素发送至第二存储设备,记录JSON对象数据ID和存储结果并退出本次遍历;所述存储结果用于表明是否存储成功;
如果等于,则找到了JSON对象数据所在的键值对。对该键值对的键值为包含N个元素的数组(N大于等于1,表1中只示出了包含1个元素的情况)数组的元素是对象类型。对于每个对象类型的元素,其包含的"FaceID"或"PersonID"是JSON对象ID。将各个元素的JSON对象ID和元素资深发送至第二存储设备进行存储。
存储成功时为存储结果为0,存储失败时,存储结果为错误码。将JSON对象ID和存储结果分别作为关键子和键值形成结果键值对。每存储完一张子JSON对象,就在result中增加一个结果键值对,得到更新的result。
G1112:如果不等于,则将数组中的各个元素依次作为目标键值对;对于每一个目标键值对执行JSON对象数据存储操作;
如果目标键值对的键值的类型是数组,但关键字不是"FaceID"或"PersonID",则对应接口中其他字段。例如对应"SubImageInfoObject"字段。G112:如果目标键值对中键值的类型为对象,则将目标键值对中的键值作为目标键值对,对于目标键值对执行JSON对象数据存储操作。
该方式中,将JSON对象数据存储到第二存储设备的指定位置path2,
并保存JSON对象ID和存储结果。
本发明实施例输出的JSON数据是符合第一校验接口规则表的JSON数据,因此,可以将该JSON数据转换为厂商通用的模板数据,通过以下步骤执行:将符合第一校验接口规则表的JSON数据,按照预先设定的模板文件转换为通用数据。
预先设定模板文件t,然后可以将符合第一校验接口规则表的JSON数据按照模板文件t进行数据转换,转换为通用数据。这样每一个JSON数据转换的通用数据都是互相对应的,不存在不兼容的问题。
本发明实施例提供的上述方法,每一个JSON数据输出的通用数据都是互相对应的,不需要针对每种JSON数据定义结构体,减少了冗余代码;可以兼容每个厂商对协议理解的差异,可以保证JSON数据的质量,不会因为兼容问题而导致系统崩溃;校验接口规则表可以写在配置文件中,方便灵活修改。
实施例四:
对应于上述方法实施例,参见图6所示的一种JSON数据的处理装置的结构示意图,该装置应用于配有校验接口规则集合的设备,校验接口规则集合包括与每类JSON接口对应的校验接口规则表,校验接口规则表包括至少一个检验接口规则,该装置包括:
JSON数据接收模块61,用于如果第一JSON接口接收到JSON数据,将JSON数据反序列化得到映射表;映射表包括至少一个键值对;
错误信息检查模块62,用于检查映射表中是否存在不符合第一JSON接口对应的第一校验接口规则表的错误信息;
修正信息获取模块63,用于如果存在错误信息,获取错误信息对应的修正信息;
修正信息替换模块64,用于应用修正信息替换JSON数据中的错误信息,得到符合第一校验接口规则表的JSON数据。
进一步地,上述校验接口规则表中的各检验接口规则与该校验接口规则表所对应的JSON接口的各字段一一对应;各检验接口规则包括其所对应字段的名称、其所对应字段的类型、其所对应字段的父节点字段;映射表的每个键值对均对应有父节点;错误信息包括递归错误信息;上述错误信息检查模块,用于:遍历映射表中的键值对,将被遍历到的键值对作为目标键值对,对于每一个目标键值对均执行下述目标键值对检查操作:从第一校验接口规则表中选择目标校验接口规则;目标校验接口规则对应的字段的名称与目标键值对的关键字相同,并且目标校验接口规则对应的字段的父节点字段与目标键值对的父节点字段相同;基于目标校验接口规则和目标键值对中键值确定是否存在目标键值对的递归错误信息。
进一步地,上述错误信息检查模块,用于:判断目标键值对中键值的类型与目标校验接口规则的字段对应的类型是否相同;如果不相同,则输出递归错误信息;如果相同,则判断键值的内容是否符合要求;如果不符合要求,则输出递归错误信息。
进一步地,上述错误信息检查模块,用于:如果目标键值对中键值的类型为数组,遍历键值中的每个元素,将被遍历到的每个元素作为目标键值对;对于每一个目标键值对执行目标键值对检查操作;如果目标键值对中键值的类型为对象,将键值作为目标键值对;对于目标键值对执行目标键值对检查操作;如果目标键值对中键值的类型为逻辑值、字符串、数字或者空值,目标校验接口规则还包括其对应字段的检查函数的类型和检查函数的参数,调用检查函数确定是否存在目标键值对的递归错误信息。
进一步地,上述错误信息还包括覆盖率错误信息;上述错误信息检查模块,用于:遍历第一校验接口规则表中的校验接口规则,将被遍历到的校验接口规则作为目标校验接口规则,对于每一个目标校验接口规则均执行下述操作:统计目标校验接口规则的第一选择次数,并判断第一选择次数是否为0;其中,如果第一校验接口规则表中的校验接口规则被当作了目标检验接口规则,对于第一选择次数加1;如果为0,则输出覆盖率错误信息;如果不为0,则统计每一个与目标校验接口规则具有相同的父节点字段的校验接口规则的第二选择次数,判断每一个第二选择次数是否与第一选择次数相同;如果存在于第一选择次数不相同的第二选择次数,则输出覆盖率错误信息。
进一步地,上述错误信息检查模块,用于:如果目标键值对中的关键字与第一校验接口规则表的各个校验接口规则中的字段名称均不同,输出错误信息。
进一步地,上述校验接口规则还包括:JSON接口的字段必要属性;字段必要属性包括可选字段和必要字段;映射表的每个键值对均对应一个必要属性;上述错误信息检查模块,用于:如果目标键值对对应的必要属性与目标校验接口规则的字段必要属性不同,输出错误信息。
进一步地,上述校验接口规则还包括:JSON接口的层级;上述错误信息检查模块,用于:获取目标键值对对应的层级;如果目标键值对对应的层级与目标校验接口规则的层级不同,输出错误信息。
进一步地,上述装置还包括数据存储模块,用于:提取JSON数据中的图片数据,将图片数据发送至第一存储设备;提取JSON数据中的JSON对象数据,将JSON对象数据发送至第二存储设备。
进一步地,上述数据存储模块,用于:遍历映射表中的键值对,将被遍历到的键值对作为目标键值对,对于每一个目标键值对均执行下述图片数据存储操作:判断目标键值对中键值的类型;如果目标键值对中键值的类型为数组,则判断目标键值对的关键字是否等于预设的图片数据关键字;如果等于,则对数组中的各个元素进行处理,把处理所得的子图数据发送至第一存储设备,记录图片ID和存储结果并退出本次遍历;存储结果用于表明是否存储成功;如果不等于,则将数组中的各个元素依次作为目标键值对;对于每一个目标键值对执行图片数据存储操作;如果目标键值对中键值的类型为对象,则将目标键值对中的键值作为目标键值对,对于目标键值对执行图片数据存储操作。
进一步地,上述数据存储模块,用于:遍历映射表中的键值对,将被遍历到的键值对作为目标键值对,对于每一个目标键值对均执行下述JSON对象数据存储操作:判断目标键值对中键值的类型;如果目标键值对中键值的类型为数组,则判断目标键值对的关键字是否等于预设的JSON对象数据关键字;如果等于,则对数组中的各个元素进行处理,把处理所得的子JSON对象数据发送至第二存储设备,记录JSON对象数据ID和存储结果并退出本次遍历;存储结果用于表明是否存储成功;如果不等于,则将数组中的各个元素依次作为目标键值对;对于每一个目标键值对执行JSON对象数据存储操作;如果目标键值对中键值的类型为对象,则将目标键值对中的键值作为目标键值对,对于目标键值对执行JSON对象数据存储操作。
进一步地,上述装置还包括数据转换模块,用于:将符合第一校验接口规则表的JSON数据,按照预先设定的模板文件转换为通用数据。
本发明实施例提供了一种JSON数据的处理装置,对于每类JSON接口配置对应的校验接口规则表,校验接口规则表包括与每类JSON接口对应的校验接口规则。
该方法中,对于第一JSON接口接收到的JSON数据,经过反序列化得到包括至少一个键值对的映射表,之后确定映射表中不符合第一校验接口规则表的错误信息,获取错误信息的对应的修正信息以替换修正信息,得到处理后的JSON数据;处理后的JSON数据符合第一校验接口规则表,是相互对应的,能够进行数据交互,因此可以减少冗余代码,降低维护成本,兼容其他厂商的系统,不会因为数据不对应导致系统崩溃。
实施例五:
本发明实施例提供了一种电子系统,该电子系统包括:数据采集设备、处理设备和存储装置;数据采集设备,用于获取JSON数据;存储装置上存储有计算机程序,计算机程序在被处理设备运行时执行如上述JSON数据的处理方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的电子系统的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理设备运行时执行如JSON数据的处理方法的步骤。
本发明实施例所提供的JSON数据的处理方法、装置和电子系统的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和/或装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (14)
1.一种JSON数据的处理方法,其特征在于,所述方法应用于配有校验接口规则集合的设备,所述校验接口规则集合包括与每类JSON接口对应的校验接口规则表,所述校验接口规则表包括至少一个检验接口规则,所述方法包括:
如果第一JSON接口接收到JSON数据,将所述JSON数据反序列化得到映射表;所述映射表包括至少一个键值对;
检查所述映射表中是否存在不符合所述第一JSON接口对应的第一校验接口规则表的错误信息;
如果存在所述错误信息,获取所述错误信息对应的修正信息;
应用所述修正信息替换所述JSON数据中的错误信息,得到符合所述第一校验接口规则表的JSON数据;
所述错误信息包括覆盖率错误信息;检查所述映射表中是否存在不符合所述第一JSON接口对应的第一校验接口规则表的错误信息的步骤,还包括:
遍历所述第一校验接口规则表中的校验接口规则,将被遍历到的校验接口规则作为目标校验接口规则,对于每一个所述目标校验接口规则均执行下述操作:
统计所述目标校验接口规则的第一选择次数,并判断所述第一选择次数是否为0;其中,如果所述第一校验接口规则表中的校验接口规则被当作了目标校验接口规则,对于所述第一选择次数加1;
如果为0,则输出所述覆盖率错误信息;
如果不为0,则统计每一个与所述目标校验接口规则具有相同的父节点字段的校验接口规则的第二选择次数,判断每一个所述第二选择次数是否与所述第一选择次数相同;
如果存在于所述第一选择次数不相同的第二选择次数,则输出所述覆盖率错误信息。
2.根据权利要求1所述的方法,其特征在于,所述校验接口规则表中的各检验接口规则与该校验接口规则表所对应的JSON接口的各字段一一对应;各检验接口规则包括其所对应字段的名称、其所对应字段的类型、其所对应字段的父节点字段;所述映射表的每个键值对均对应有父节点;所述错误信息包括递归错误信息;
检查所述映射表中是否存在不符合所述第一JSON接口对应的第一校验接口规则表的错误信息的步骤,包括:
遍历所述映射表中的键值对,将被遍历到的键值对作为目标键值对,对于每一个所述目标键值对均执行下述目标键值对检查操作:
从所述第一校验接口规则表中选择目标校验接口规则;所述目标校验接口规则对应的字段的名称与所述目标键值对的关键字相同,并且所述目标校验接口规则对应的字段的父节点字段与所述目标键值对的父节点字段相同;
基于所述目标校验接口规则和所述目标键值对中键值确定是否存在所述目标键值对的递归错误信息。
3.根据权利要求2所述的方法,其特征在于,基于所述目标校验接口规则和所述目标键值对中键值确定是否存在所述目标键值对的递归错误信息的步骤,包括:
判断所述目标键值对中键值的类型与所述目标校验接口规则的字段对应的类型是否相同;
如果不相同,则输出所述递归错误信息;
如果相同,则判断键值的内容是否符合要求;
如果不符合要求,则输出所述递归错误信息。
4.根据权利要求3所述的方法,其特征在于,判断键值的内容是否符合要求的步骤,包括:
如果所述目标键值对中键值的类型为数组,遍历键值中的每个元素,将被遍历到的每个元素作为目标键值对;对于每一个所述目标键值对执行所述目标键值对检查操作;
如果所述目标键值对中键值的类型为对象,将键值作为目标键值对;对于所述目标键值对执行所述目标键值对检查操作;
如果所述目标键值对中键值的类型为逻辑值、字符串、数字或者空值,所述目标校验接口规则还包括其对应字段的检查函数的类型和检查函数的参数,调用所述检查函数确定是否存在所述目标键值对的递归错误信息。
5.根据权利要求2所述的方法,其特征在于,检查所述映射表中是否存在不符合所述第一JSON接口对应的第一校验接口规则表的错误信息的步骤,还包括:
如果所述目标键值对中的关键字与所述第一校验接口规则表的各个校验接口规则中的字段名称均不同,输出所述错误信息。
6.根据权利要求2所述的方法,其特征在于,所述校验接口规则还包括:JSON接口的字段必要属性;所述字段必要属性包括可选字段和必要字段;所述映射表的每个键值对均对应一个必要属性;
检查所述映射表中是否存在不符合所述第一JSON接口对应的第一校验接口规则表的错误信息的步骤,还包括:
如果所述目标键值对对应的必要属性与所述目标校验接口规则的字段必要属性不同,输出所述错误信息。
7.根据权利要求2所述的方法,其特征在于,所述校验接口规则还包括:JSON接口的层级;
检查所述映射表中是否存在不符合所述第一JSON接口对应的第一校验接口规则表的错误信息的步骤,还包括:
获取所述目标键值对对应的层级;
如果所述目标键值对对应的层级与所述目标校验接口规则的层级不同,输出所述错误信息。
8.根据权利要求1所述的方法,其特征在于,在得到符合所述第一校验接口规则表的JSON数据的步骤之后,所述方法还包括:
提取所述JSON数据中的图片数据,将所述图片数据发送至第一存储设备;
提取所述JSON数据中的JSON对象数据,将所述JSON对象数据发送至第二存储设备。
9.根据权利要求8所述的方法,其特征在于,提取所述JSON数据中的图片数据,将所述图片数据发送至第一存储设备的步骤,包括:
遍历所述映射表中的键值对,将被遍历到的键值对作为目标键值对,对于每一个所述目标键值对均执行下述图片数据存储操作:
判断所述目标键值对中键值的类型;
如果所述目标键值对中键值的类型为数组,则判断所述目标键值对的关键字是否等于预设的图片数据关键字;
如果等于,则对数组中的各个元素进行处理,把处理所得的子图数据发送至第一存储设备,记录图片ID和存储结果并退出本次遍历;所述存储结果用于表明是否存储成功;
如果不等于,则将所述数组中的各个元素依次作为目标键值对;对于每一个所述目标键值对执行所述图片数据存储操作;
如果所述目标键值对中键值的类型为对象,则将所述目标键值对中的键值作为目标键值对,对于所述目标键值对执行所述图片数据存储操作。
10.根据权利要求8所述的方法,其特征在于,提取所述JSON数据中的JSON对象数据,将所述JSON对象数据发送至第二存储设备的步骤,包括:
遍历所述映射表中的键值对,将所述被遍历到的键值对作为目标键值对,对于每一个所述目标键值对均执行下述JSON对象数据存储操作:
判断所述目标键值对中键值的类型;
如果所述目标键值对中键值的类型为数组,则判断所述目标键值对的关键字是否等于预设的JSON对象数据关键字;
如果等于,则将数组中的各个元素发送至第二存储设备,记录JSON对象数据ID和存储结果并退出本次遍历;所述存储结果用于表明是否存储成功;
如果不等于,则将所述数组中的各个元素依次作为目标键值对;对于每一个所述目标键值对执行所述JSON对象数据存储操作;
如果所述目标键值对中键值的类型为对象,则将所述目标键值对中的键值作为目标键值对,对于所述目标键值对执行所述JSON对象数据存储操作。
11.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将符合所述第一校验接口规则表的JSON数据,按照预先设定的模板文件转换为通用数据。
12.一种JSON数据的处理装置,其特征在于,所述装置应用于配有校验接口规则集合的设备,所述校验接口规则集合包括与每类JSON接口对应的校验接口规则表,所述校验接口规则表包括至少一个检验接口规则,所述装置包括:
JSON数据接收模块,用于如果第一JSON接口接收到JSON数据,将所述JSON数据反序列化得到映射表;所述映射表包括至少一个键值对;
错误信息检查模块,用于检查所述映射表中是否存在不符合所述第一JSON接口对应的第一校验接口规则表的错误信息;
修正信息获取模块,用于如果存在所述错误信息,获取所述错误信息对应的修正信息;
修正信息替换模块,用于应用所述修正信息替换所述JSON数据中的错误信息,得到符合所述第一校验接口规则表的JSON数据;
所述错误信息包括覆盖率错误信息;所述错误信息检查模块,用于遍历所述第一校验接口规则表中的校验接口规则,将被遍历到的校验接口规则作为目标校验接口规则,对于每一个所述目标校验接口规则均执行下述操作:统计所述目标校验接口规则的第一选择次数,并判断所述第一选择次数是否为0;其中,如果所述第一校验接口规则表中的校验接口规则被当作了目标检验接口规则,对于所述第一选择次数加1;如果为0,则输出所述覆盖率错误信息;如果不为0,则统计每一个与所述目标校验接口规则具有相同的父节点字段的校验接口规则的第二选择次数,判断每一个所述第二选择次数是否与所述第一选择次数相同;如果存在于所述第一选择次数不相同的第二选择次数,则输出所述覆盖率错误信息。
13.一种电子系统,其特征在于,所述电子系统包括:数据采集设备、处理设备和存储装置;
所述数据采集设备,用于获取JSON数据;
所述存储装置上存储有计算机程序,所述计算机程序在被所述处理设备运行时执行如权利要求1至11任一项所述的JSON数据的处理方法。
14.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理设备运行时执行如权利要求1至11任一项所述的JSON数据的处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911188279.XA CN110968322B (zh) | 2019-11-27 | 2019-11-27 | Json数据的处理方法、装置和电子系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911188279.XA CN110968322B (zh) | 2019-11-27 | 2019-11-27 | Json数据的处理方法、装置和电子系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110968322A CN110968322A (zh) | 2020-04-07 |
CN110968322B true CN110968322B (zh) | 2023-04-28 |
Family
ID=70031992
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911188279.XA Active CN110968322B (zh) | 2019-11-27 | 2019-11-27 | Json数据的处理方法、装置和电子系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110968322B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111680475B (zh) * | 2020-04-28 | 2022-11-15 | 五八有限公司 | 一种数据转换方法、装置、电子设备及存储介质 |
CN111835710B (zh) * | 2020-05-29 | 2023-08-15 | 中国平安财产保险股份有限公司 | 校验请求体的方法、装置、计算机设备和存储介质 |
CN111736917B (zh) * | 2020-06-10 | 2022-11-18 | 苏宁云计算有限公司 | 数据校验方法、装置、计算机设备和存储介质 |
CN112015763A (zh) * | 2020-07-14 | 2020-12-01 | 北京旷视科技有限公司 | Json数据校验方法、装置、电子设备和计算机可读介质 |
CN112052157B (zh) * | 2020-07-24 | 2023-10-31 | 北京旷视科技有限公司 | 测试报文的构造方法、装置及系统 |
CN112231616A (zh) * | 2020-09-29 | 2021-01-15 | 北京五八信息技术有限公司 | 页面数据刷新方法、装置、电子设备及存储介质 |
CN112597164A (zh) * | 2020-12-26 | 2021-04-02 | 中国农业银行股份有限公司 | 一种标识分配方法及装置 |
CN112925749A (zh) * | 2021-02-20 | 2021-06-08 | 北京同邦卓益科技有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN113612725A (zh) * | 2021-06-18 | 2021-11-05 | 北京旷视科技有限公司 | 数据转换方法、装置、电子设备及可读存储介质 |
CN113949522A (zh) * | 2021-08-26 | 2022-01-18 | 上海宝康电子控制工程有限公司 | 一种实现智能数据通讯转发的系统及方法 |
CN113935276B (zh) * | 2021-12-16 | 2022-03-25 | 北京云枢创新软件技术有限公司 | 设计数据映射关系构建系统 |
CN117331926B (zh) * | 2023-12-01 | 2024-03-01 | 太平金融科技服务(上海)有限公司 | 一种数据稽核方法、装置、电子设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018006789A1 (zh) * | 2016-07-04 | 2018-01-11 | 中兴通讯股份有限公司 | 一种参数校验方法和装置、以及网管服务器和计算机存储介质 |
CN108664388A (zh) * | 2017-03-31 | 2018-10-16 | 北京京东尚科信息技术有限公司 | 动态字段数据返回接口的测试系统、方法、电子设备和可读存储介质 |
CN109510824A (zh) * | 2018-11-12 | 2019-03-22 | 中国银行股份有限公司 | 一种接口报文的校验方法及装置 |
-
2019
- 2019-11-27 CN CN201911188279.XA patent/CN110968322B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018006789A1 (zh) * | 2016-07-04 | 2018-01-11 | 中兴通讯股份有限公司 | 一种参数校验方法和装置、以及网管服务器和计算机存储介质 |
CN108664388A (zh) * | 2017-03-31 | 2018-10-16 | 北京京东尚科信息技术有限公司 | 动态字段数据返回接口的测试系统、方法、电子设备和可读存储介质 |
CN109510824A (zh) * | 2018-11-12 | 2019-03-22 | 中国银行股份有限公司 | 一种接口报文的校验方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110968322A (zh) | 2020-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110968322B (zh) | Json数据的处理方法、装置和电子系统 | |
US8489623B2 (en) | Creating data in a data store using a dynamic ontology | |
JP4711708B2 (ja) | ネストされたテーブルを用いたスキーマレスデータマッピングのためのシステムおよび方法 | |
US20170078158A1 (en) | Techniques for yang model version control validation | |
US10824345B2 (en) | Systems and methods for storing object state on hash chains | |
JPS59154538A (ja) | スクリ−ン管理システムを構成する方法 | |
US10489493B2 (en) | Metadata reuse for validation against decentralized schemas | |
CN106664224A (zh) | 通信系统的元数据增强型库存管理的方法和系统 | |
WO2023201990A1 (zh) | 一种视觉定位方法、装置、设备及介质 | |
WO2021212661A1 (zh) | 运行系统构建方法、装置、电子设备及存储介质 | |
US11204860B2 (en) | Methods and apparatuses for generating smart contract test case | |
CN112052157B (zh) | 测试报文的构造方法、装置及系统 | |
US20060242169A1 (en) | Storing and indexing hierarchical data spatially | |
CN111740851B (zh) | 配置报文生成方法、设备以及系统 | |
KR102102546B1 (ko) | Scl 유효성 검사 방법 및 이를 위한 scl 유효성 검사 장치 | |
US20050195738A1 (en) | Method and system for automatically determining commands for a network element | |
CN111966815B (zh) | 数据校验模板的生成方法、装置和电子系统 | |
CN114489594A (zh) | 一种命令解析器的构建方法、命令解析处理方法及装置 | |
CN114296726A (zh) | 一种代码生成方法、装置、计算机设备和存储介质 | |
CN113612725A (zh) | 数据转换方法、装置、电子设备及可读存储介质 | |
US11256679B2 (en) | Systems and methods for storing object state on hash chains | |
US11134319B1 (en) | Streaming video data using contributor trust | |
EP4246909A1 (en) | Method and apparatus for configuring node | |
CN116643746A (zh) | 前端界面呈现方法、装置、存储介质和电子设备 | |
CN116644121A (zh) | 一种数据格式校验方法、装置、设备及存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230811 Address after: No. 1268, 1f, building 12, neijian Middle Road, Xisanqi building materials City, Haidian District, Beijing 100096 Patentee after: BEIJING KUANGSHI TECHNOLOGY Co.,Ltd. Address before: 100080 room 1018, 10th floor, 1 Zhongguancun Street, Haidian District, Beijing Patentee before: BEIJING KUANGSHI TECHNOLOGY Co.,Ltd. Patentee before: Qingdao Guangshi Technology Co.,Ltd. |
|
TR01 | Transfer of patent right |