CN109766100A - 数据处理方法及装置 - Google Patents
数据处理方法及装置 Download PDFInfo
- Publication number
- CN109766100A CN109766100A CN201811512555.9A CN201811512555A CN109766100A CN 109766100 A CN109766100 A CN 109766100A CN 201811512555 A CN201811512555 A CN 201811512555A CN 109766100 A CN109766100 A CN 109766100A
- Authority
- CN
- China
- Prior art keywords
- character string
- outermost layer
- json
- current
- path field
- 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
Landscapes
- Input From Keyboards Or The Like (AREA)
Abstract
本申请提出了一种数据处理方法及装置,涉及计算机技术领域,通过将接收目标路径地址中每一层级路径字段的值,均与JSON字符串中包含的键值对中的键元素进行匹配,以根据目标路径地址,从JSON字符串中嵌套在最外层的键元素查找到目标键元素所在层,并在目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对中的键元素均匹配成功时,获得JSON字符串包含的键值对中,与目标层级路径字段的值相匹配的键元素作为目标键元素,以用于对JSON字符串的解析。本申请所提供的一种数据处理方法及装置,能够降低JSON字符串与解析程序两者的耦合程度。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种数据处理方法及装置。
背景技术
JSON(JavaScript Object Notation,简称:JS对象简谱)是一种轻量级的数据交换格式,它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为数据交换语言,易于人阅读和编写,同时也易于机器解析和生成,并能够有效地提升网络传输效率。
发明内容
有鉴于此,本申请提供一种数据处理方法及装置,能够降低JSON字符串与解析程序两者的耦合程度。
为了实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请实施例提供了一种数据处理方法,应用于对JSON字符串的数据处理,所述JSON字符串包括一个或多个键值对,所述键值对由键元素和值元素构成,所述方法包括:
接收目标路径地址,其中,所述目标路径地址表征在所述JSON字符串中从嵌套在最外层的键元素查找到目标键元素所在层的路径信息,所述目标路径地址包含至少一个层级的路径字段;
将所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素进行匹配;
若所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素均匹配,获得所述JSON字符串包含的键值对中,与目标层级路径字段的值相匹配的键元素作为所述目标键元素,其中,所述目标层级路径字段为所述目标路径地址中位于最后层级的路径字段。
可选地,作为一种可能的实现方式,所述将所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素进行匹配的步骤,包括:
判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组;
若所述当前最外层字符串为JSON对象,获得所述当前最外层字符串包含的所有键元素;
若在所述当前最外层字符串包含的所有键元素中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串中与当前键元素对应的值元素作为新的当前最外层字符串;
重复执行所述判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组的步骤,其中,所述当前键元素为所述最外层字符串包含的所有键元素中,与所述目标路径地址中所述当前最外层路径字段的值相匹配的键元素。
可选地,作为一种可能的实现方式,所述将所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素进行匹配的步骤,还包括:
若所述当前最外层字符串为JSON数组,获得所述当前最外层字符串包含的所有JSON对象;
遍历所述当前最外层字符串包含的所有JSON对象,若在所述当前最外层字符串包含的所有JSON对象中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串包含的所有JSON对象中的当前JSON对象作为新的当前最外层字符串;
重复执行所述判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组的步骤,其中,所述当前JSON对象为所述当前最外层字符串包含的所有JSON对象中,与所述目标路径地址中所述当前最外层路径字段的值相匹配的JSON对象。
可选地,作为一种可能的实现方式,所述将所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素进行匹配的步骤,还包括:
若所述当前最外层字符串为JSON数组,获得所述当前最外层字符串包含的所有JSON对象以及每一JSON对象各自的标识信息,其中,每一所述JSON对象各自的标识信息用于标识分配给每一所述JSON对象各自对应的键元素;
若在所述当前最外层字符串包含的所有JSON对象各自的标识信息中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串中与目标标识信息对应的JSON对象作为新的当前最外层字符串;
重复执行所述判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组的步骤;
其中,所述目标标识信息为所述最外层字符串包含的所有JSON对象各自的标识信息中,与所述目标路径地址中所述当前层级路径字段的值相匹配的标识信息。
可选地,作为一种可能的实现方式,所述将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段的步骤,包括:
删除所述目标路径地址中的所述当前最外层路径字段,以使所述当前最外层路径字段的下一层路径字段作为所述新的当前最外层路径字段。
可选地,作为一种可能的实现方式,所述方法还包括:
获得与所述目标键元素对应的目标数据,其中,所述目标数据为所述目标键元素对应的值元素或包含所述目标键元素的键值对;
获得对所述目标数据进行操作的目标操作指令,其中,所述目标操作指令包括根据所述目标数据进行返回值、删除、更新中的至少之一;
响应所述目标操作指令,对所述目标数据进行处理。
第二方面,本申请实施例提供了一种数据处理装置,应用于对JSON字符串的数据处理,所述JSON字符串包括一个或多个键值对,所述键值对由键元素和值元素构成,所述装置包括:
收发模块,用于接收目标路径地址,其中,所述目标路径地址表征在所述JSON字符串中从嵌套在最外层的键元素查找到目标键元素所在层的路径信息,所述目标路径地址包含至少一个层级的路径字段;
处理模块,用于将所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素进行匹配;
所述处理模块还用于,若所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素均匹配,获得所述JSON字符串包含的键值对中,与目标层级路径字段的值相匹配的键元素作为所述目标键元素,其中,所述目标层级路径字段为所述目标路径地址中位于最后层级的路径字段。
可选地,作为一种可能的实现方式,所述处理模块具体用于:
判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组;
若所述当前最外层字符串为JSON对象,获得所述当前最外层字符串包含的所有键元素;
若在所述当前最外层字符串包含的所有键元素中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串中与当前键元素对应的值元素作为新的当前最外层字符串;
重复执行判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组,其中,所述当前键元素为所述最外层字符串包含的所有键元素中,与所述目标路径地址中所述当前最外层路径字段的值相匹配的键元素。
可选地,作为一种可能的实现方式,所述处理模块还具体用于:
若所述当前最外层字符串为JSON数组,获得所述当前最外层字符串包含的所有JSON对象;
遍历所述当前最外层字符串包含的所有JSON对象,若在所述当前最外层字符串包含的所有JSON对象中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串包含的所有JSON对象中的当前JSON对象作为新的当前最外层字符串;
重复执行判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组,其中,所述当前JSON对象为所述当前最外层字符串包含的所有JSON对象中,与所述目标路径地址中所述当前最外层路径字段的值相匹配的JSON对象。
可选地,作为一种可能的实现方式,所述处理模块还具体用于:
若所述当前最外层字符串为JSON数组,获得所述当前最外层字符串包含的所有JSON对象以及每一JSON对象各自的标识信息,其中,每一所述JSON对象各自的标识信息用于标识分配给每一所述JSON对象各自对应的键元素;
若在所述当前最外层字符串包含的所有JSON对象各自的标识信息中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串中与目标标识信息对应的JSON对象作为新的当前最外层字符串;
重复执行判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组;
其中,所述目标标识信息为所述最外层字符串包含的所有JSON对象各自的标识信息中,与所述目标路径地址中所述当前层级路径字段的值相匹配的标识信息。
可选地,作为一种可能的实现方式,所述处理模块还具体用于:
删除所述目标路径地址中的所述当前最外层路径字段,以使所述当前最外层路径字段的下一层路径字段作为所述新的当前最外层路径字段。
可选地,作为一种可能的实现方式,
所述处理模块还用于,获得与所述目标键元素对应的目标数据,其中,所述目标数据为所述目标键元素对应的值元素或包含所述目标键元素的键值对;
所述收发模块还用于,获得对所述目标数据进行操作的目标操作指令,其中,所述目标操作指令包括根据所述目标数据进行返回值、删除、更新中的至少之一;
所述处理模块还用于,响应所述目标操作指令,对所述目标数据进行处理。
第三方面,本申请实施例提供了一种电子设备,所述电子设备包括存储器,用于存储一个或多个程序;处理器。当所述一个或多个程序被所述处理器执行时,实现上述的数据处理方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述的数据处理方法。
相对于现有技术,本申请实施例所提供的一种数据处理方法及装置,由接收的目标路径地址,将目标路径地址中每一层级路径字段的值,均与JSON字符串中包含的键值对中的键元素进行匹配,以根据目标路径地址,从JSON字符串中嵌套在最外层的键元素查找到目标键元素所在层,并在目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对中的键元素均匹配成功时,获得JSON字符串包含的键值对中,与目标层级路径字段的值相匹配的键元素作为目标键元素,以用于对JSON字符串的解析,相比于现有技术,在对不同的JSON字符串进行操作时,不再通过更新解析程序,而是将解析程序写死,灵活配置目标路径地址的方式,通过解析目标路径地址从而在JSON字符串中匹配定位查找获得目标键元素,能够降低JSON字符串与解析程序两者的耦合程度。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它相关的附图。
图1示出了本申请实施例所提供的一种电子设备的一种示意性结构图;
图2为一种树形结构逻辑划分示意图;
图3示出了本申请实施例所提供的一种数据处理方法的一种示意性流程图;
图4为图3中S101的子步骤的一种示意性流程图;
图5为图3中S101的子步骤的另一种示意性流程图;
图6示出了本申请实施例所提供的一种数据处理装置的一种示意性结构图。
图中:100-电子设备;101-存储器;102-处理器;103-通信接口;200-数据处理装置;201-收发模块;202-处理模块。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
JSON可分为JSON对象和JSON数组,在具有JSON格式的字符串中,一般会由多个JSON对象和多个JSON数组相互嵌套形成具有多个层级的JSON字符串,每一JSON数组或JSON对象中均包含有一个或多个的键值对,且每一键值对均由对应相关的键元素(key)和值元素(value)构成。JSON对象指的是由“{}”包裹、由“,”分隔的键值对的集合,比如在JSON对象{“name”:“zhangsan”,“age”:10}中,包含“name”:“zhangsan”和“age”:10两个键值对;而JSON数组则是由“[]”包裹、由“,”分隔的JSON对象的集合,比如JSON数组[{“name”:“zhangsan”,“age”:10},{“name”:“lisi”,“age”:12}]中,包含{“name”:“zhangsan”,“age”:10}和{“name”:“lisi”,“age”:12}两个JSON对象。
比如,一个示例的JSON字符串为:{"title":"test",depart":"ai","info":{"create Time":"2018/09/13","member Nun":2},"member":[{"name":"zhangsan","age":30},{"name":"lisi","age":31}]}。
现有技术中,如果要解析该JSON字符串,一般需要先编译解析程序,对JSON字符串逐层解析,以实现对JSON字符串的操作。
比如欲获得上述JSON字符串中的“name”为“zhangsan”的“age”,一种方式为先将JSON字符串根据其格式转换为JSON对象或者JSON数组,对于JSON对象,可以基于key值(键元素)获取value值(值元素)的方式进行解析;而对于JSON数组,则可以采用遍历的方式获取JSON对象,再基于key值获取value值。
然而,由于不同的JSON字符串具有不同的结构形式,比如JSON数组与JSON对象相互嵌套的数量或者是方式不同,抑或是不同的JSON字符串具有完全不同的具体内容。因此,在上述现有技术的解析方式中,JSON字符串与解析程序两者的耦合程度较高,针对不同的JSON字符串,一般需要修改代码、编译不同的解析程序才能解析不同的JSON字符串,导致重复工作较多;并且,若JSON字符串嵌套的结构较为复杂时,解析程序也需要编码的较为复杂,导致编译程序的可读性和可维护性都较差。
基于上述缺陷,本申请实施例提供的一种实现方式为:将解析程序写死,而灵活配置目标路径地址,进而由接收的目标路径地址,将目标路径地址中,每一层级路径字段的值均与JSON字符串中包含的键值对中的键元素进行匹配,以根据目标路径地址,从JSON字符串中嵌套在最外层的键元素查找到目标键元素所在层,并在目标路径地址中,每一层级路径字段的值与JSON字符串包含的键值对中的键元素均匹配时,获得JSON字符串包含的键值对中,与目标层级路径字段的值相匹配的键元素作为目标键元素,以用于对JSON字符串的解析。
请参阅图1,图1示出了本申请实施例所提供的一种电子设备100的一种示意性结构图,所述电子设备100包括存储器101、处理器102和通信接口103,该存储器101、处理器102和通信接口103相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。存储器101可用于存储软件程序及模块,如本申请实施例所提供的数据处理装置200对应的程序指令/模块,处理器102通过执行存储在存储器101内的软件程序及模块,从而执行各种功能应用以及数据处理。该通信接口103可用于与其他节点设备进行信令或数据的通信。
其中,存储器101可以是但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器102可以是一种集成电路芯片,具有信号处理能力。该处理器102可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP))、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
可以理解,图1所示的结构仅为示意,电子设备100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。
在具有JSON格式的字符串中,由于JSON对象内包裹的是一个或多个的键值对,比如在上述JSON字符串中,最外层字符串包含的一个键值对为:"title"-"test"。并且,在JSON字符串包含的键值对中,值元素可以是具体的字符串,比如前述的“test”,也可以是JSON对象比如在上述JSON字符串中,最外层字符串包含的另一键值对为:"info"-{"createTime":"2018/09/13","member Nun":2};值元素还可以是JSON对象,比如在上述JSON字符串中,最外层字符串包含的另一键值对为:"member"-[{"name":"zhangsan","age":30},{"name":"lisi","age":31}]。
并且,由于JSON数组内包裹的是一个或多个的JSON对象,在JSON数组中原本是不包含有键元素的,比如在上述JSON字符串中,JSON数组[{"name":"zhangsan","age":30},{"name":"lisi","age":31}]包裹的两个JSON对象分别为{"name":"zhangsan","age":30}和{"name":"lisi","age":31}。
因此,在本申请实施例的实现方式中,为JSON数组的每一JSON对象分配一键元素,使该分配的键元素与JSON对象构成键值对,值得说明的是,分配的键元素属于电子设备100的逻辑概念,在JSON字符串中可能实际并不存在该分配的键元素。
当然,可以理解的是,在本申请实施例其他的一些实施方式中,电子设备100还可以实际为JSON数组中的每一JSON对象分配一键元素,这取决于具体的程序代码而定。
由此,在本申请实施例提供的一种可能的实现方式中,可以按照每一键值对的键元素(包括JSON字符串中实际存在的键元素和为JSON数组中的JSON对象分配的键元素)对JSON字符串进行树形结构逻辑划分每一键元素各自的层级节点。比如,对于上述示例的JSON字符串,请参阅图2,图2为一种树形结构逻辑划分示意图,在上述示例的JSON字符串中,将最外层字符串作为根节点,并将最外层字符串中包含的所有键元素作为根节点下一层级的节点,以此为原则即可得到该树形结构图,也就是说,在如图2所示的树形结构图中,每一结构节点均代表JSON字符串中的键元素。并且,值得说明的是,在上述示例的JSON字符串中,由于包含有JSON数组(“member”对应的值元素为JSON数组),而在该JSON数组中,包含有两个JSON对象,可以为每一JSON对象分配一个键元素,比如在如图2的示意图中,{"name":"zhangsan","age":30}分配的键元素为“#0”,{"name":"lisi","age":31}分配的键元素为“#1”。
由此,在本申请实施例中,可以基于上述将JSON字符串进行树形结构进行划分的逻辑,将解析程序固定,而根据目标键元素位于树形结构中的节点位置,由树形结构中的根节点依次索引到目标键元素所在层节点的方式,对JSON字符串进行解析。
请参阅图3,图3示出了本申请实施例所提供的一种数据处理方法的一种示意性流程图,该数据处理方法可应用于对JSON字符串的解析处理,在本申请实施例中,该数据处理方法包括以下步骤:
S100,接收目标路径地址。
S101,将目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对中的键元素进行匹配;若目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对中的键元素均匹配,执行S102;若目标路径地址中,存在与JSON字符串包含的键值对中的键元素匹配失败的层级路径字段,执行S106。
在对JSON字符串进行解析时,电子设备100接收目标路径地址,其中,该目标路径地址表征在JSON字符串中从嵌套在最外层的键元素查找到目标键元素所在层的路径信息,且该目标路径地址包含至少一个层级的路径字段,在目标路径地址中,相邻层级的路径字段可以采用预设的字段分隔符隔开,比如采用“/”、“-”或者是“,”进行分隔。
比如,假定欲获得上述JSON字符串中的“name”为“zhangsan”的“age”,采用“/”对目标路径地址中相邻层级的路径字段进行分隔,则目标路径地址的一种表示形式可以为:/member/#0/age,该目标路径地址表征分别在“member”、“#0”以及“age”作为键元素的三个层级中查找获得目标键元素;并且,由于目标键元素所在的层级存在JSON数组与JSON对象相互嵌套的情况,因此,目标路径地址的另一个表示形式可以为:/member/age[name=zhangsan],此时,目标路径地址中仅存在两个层级的键元素,分别为“member”和“age”,但在该目标路径地址中,“age”后面带有限制条件“[name=zhangsan]”,表征获得“name”为“zhangsan”的“age”。
由此,对于上述接收到的目标路径地址,按照预设的字段分隔符将目标路径地址包含的所有层级的路径字段进行解析,并将目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对中的键元素进行匹配;若目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对中的键元素均匹配,执行S102;若目标路径地址中,存在与JSON字符串包含的键值对中的键元素匹配失败的层级路径字段,执行S106。
可选地,请参阅图4,图4为图3中S101的子步骤的一种示意性流程图,作为一种可能的实现方式,S101包括以下子步骤:
S101-1,判断JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组;若当前最外层字符串为JSON对象,执行S101-2;若当前最外层字符串为JSON数组,执行S101-4或S101-7。
在将目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对中的键元素进行匹配时,需要将JSON字符串由最外层的字符串开始,依次与目标路径地址中对应层级的路径字段相匹配,比如,在上述示例JSON字符串以及示例为“/member/#0/age”的目标路径地址中,需要将JSON字符串按照如2所示的树形结构的流向,由最外层字符串的节点依次匹配至目标键元素所在层字符串的节点。
其中,由于JSON对象与JSON数组各自本身的结构特点不同,JSON对象中包含实际存在的键值对,而JSON数组中包含的是一个或多个的JSON对象,因此,在将JSON字符串由最外层字符串的节点依次匹配至目标键元素所在层字符串的节点的过程中,每一次匹配时,将所匹配的那一层字符串作为JSON字符串的当前最外层字符串,并在该当前最外层字符串为JSON对象时,执行S101-2;而在该当前最外层字符串为JSON数组时,执行S101-4或S101-7。
S101-2,获得当前最外层字符串包含的所有键元素。
S101-3,在当前最外层字符串包含的所有键元素中,匹配目标路径地址中当前最外层路径字段的值;若匹配成功,执行S101-6;若匹配失败,确定目标路径地址中,存在与JSON字符串包含的键值对中的键元素匹配失败的层级路径字段。
若由S101-1确定JSON字符串嵌套在当前最外层字符串为JSON对象时,解析该当前最外层字符串获得当前最外层字符串包含的所有键元素。比如,在上述示例的JSON字符串中,若当前最外层字符串为:{"title":"test",depart":"ai","info":{"create Time":"2018/09/13","member Nun":2},"member":[{"name":"zhangsan","age":30},{"name":"lisi","age":31}]},则此时解析该当前最外层字符串所获得的所有键元素包括:title、depart、info及member;同理,若当前最外层字符串为:{"name":"zhangsan","age":30},则此时解析该当前最外层字符串所获得的所有键元素包括:name及age。
在将目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对进行匹配时,电子设备100逐级解析目标路径地址,将目标路径地址中每一层级路径字段的值依次作为当前最外层路径字段的值,并与JSON字符串包含的键值对中的键元素相匹配。比如说,在上述示例为“/member/#0/age”的目标路径地址中,依次将“member”、“#0”及“age”作为当前最外层路径字段的值与JSON字符串包含的键值对中的键元素相匹配。
由此,根据JSON字符串中当前最外层字符串包含的所有键元素,在当前最外层字符串包含的所有键元素中,匹配目标路径地址中当前最外层路径字段的值,比如在上述示例中,若JSON字符串的当前最外层字符串为:{"title":"test",depart":"ai","info":{"create Time":"2018/09/13","member Nun":2},"member":[{"name":"zhangsan","age":30},{"name":"lisi","age":31}]},则此时当前最外层字符串包含的所有键元素有:title、depart、info及member;且目标路径地址中当前最外层路径字段的值为“member”,此时在当前最外层字符串包含的所有键元素中,能够匹配到目标路径地址中当前最外层路径字段的值“member”,表征在当前最外层字符串包含的所有键元素中,能够匹配到目标路径地址中当前最外层路径字段的值,此时执行S101-6;反之,若按照上述示例,假定目标路径地址中当前最外层路径字段的值为“number”,则此时在当前最外层字符串包含的所有键元素中,匹配不到目标路径地址中当前最外层路径字段的值“number”,表征在目标路径地址中,存在与JSON字符串包含的键值对中的键元素匹配失败的层级路径字段。
S101-6,判断当前最外层路径字段是否为目标层级路径字段;若为是,则确定目标路径地址中,每一层级路径字段的值与JSON字符串包含的键值对中的键元素均匹配;若为否,则将目标路径地址中,当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将当前最外层字符串中与当前键元素对应的值元素作为新的当前最外层字符串,重新执行S101-1。
电子设备100逐级解析目标路径地址时,将目标路径地址中位于最后层级的路径字段作为目标层级路径字段,比如在上述示例为“/member/#0/age”的目标路径地址中,目标层级路径字段为“age”所在的字段。
电子设备100在确定当前最外层字符串包含的所有键元素中,能够匹配到目标路径地址中当前最外层路径字段的值后,若确定当前最外层路径字段为该目标层级路径字段,表征目标路径地址已经解析结束,目标路径地址中,每一层级路径字段的值与JSON字符串包含的键值对中的键元素均匹配;反之,若确定当前最外层路径字段不为目标层级路径字段,表征目标路径地址还未解析结束,还需要继续解析该目标路径地址,此时则将目标路径地址中,当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将当前最外层字符串中与当前键元素对应的值元素作为新的当前最外层字符串,重新执行S101-1。
也就是说,在逐级解析目标路径地址时,需要逐级解析目标路径地址中每一层级的路径字段,以及JSON字符串中每一层级字符串的键元素,直至目标路径地址中位于最后层级的路径字段与JSON字符串中包含的键元素匹配为止。
可选地,作为一种可能的实现方式,在本申请实施例中,在确定当前最外层路径字段不为目标层级路径解析,需要再重新执行S101-1,在将目标路径地址中,当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段方式为:
删除目标路径地址中的当前最外层路径字段,以使当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段。
比如,在上述示例为“/member/#0/age”的目标路径地址中,若当前最外层路径字段为“member”所在的字段,在确定当前最外层路径字段不是目标路径,此时删除“member”所在的路径字段,目标路径地址更新为“/#0/age”,以使“#0”所在的路径字段作为新的当前最外层路径字段。
值得说明的是,在本申请实施例其他的一些实施方式中,还可以采用其他的一些实现方式获得新的当前最外层路径字段,比如,采用直接定位的方式确定当前最外层路径字段,在例如上述示例为“/member/#0/age”的目标路径地址中,若当前最外层路径字段为“member”,当“member”解析完成后,则继续定位“#0”作为新的当前最外层路径字段,而不删除“member”所在的字段。
S101-4,获得当前最外层字符串包含的所有JSON对象。
S101-5,在当前最外层字符串包含的所有JSON对象中,匹配目标路径地址中当前最外层路径字段的值;若匹配成功,执行S101-6;若匹配失败,确定目标路径地址中,存在与JSON字符串包含的键值对中的键元素匹配失败的层级路径字段。
在本申请实施例中,若由S101-1确定出JSON字符串嵌套在当前最外层字符串为JSON数组,则解析该当前最外层字符串,获得当前最外层字符串包含的所有JSON对象。
比如,在上述示例的JSON字符串中,若当前最外层字符串为:[{"name":"zhangsan","age":30},{"name":"lisi","age":31}],则此时解析该当前最外层字符串所获得的所有JSON对象包括:{"name":"zhangsan","age":30}和{"name":"lisi","age":31}。
由于在JSON字符串中,JSON数组中实际包裹的是JSON对象,本身是不存在键值对的,因此,需要根据目标路径地址中当前最外层路径字段的值对当前最外层字符串包含的所有JSON对象进行不同的操作。
其中,若目标路径地址中当前最外层路径字段的值包含有键值对的形式时,则直接在当前最外层字符串包含的所有JSON对象中匹配目标路径地址中当前最外层路径字段的值。
比如,在上述目标路径地址为“/member/age[name=zhangsan]”的示例中,若JSON字符串中当前最外层字符串所获得的所有JSON对象包括:{"name":"zhangsan","age":30}和{"name":"lisi","age":31},当前最外层路径字段的值为“age[name=zhangsan]”,此时由于当前最外层路径字段的值中包含有键值对,则直接将“age[name=zhangsan]”与{"name":"zhangsan","age":30}和{"name":"lisi","age":31}相匹配,先匹配“name”为“zhangsan”的JSON对象为:{"name":"zhangsan","age":30},再以“age”匹配到的键值对为:"age":30。
同理,在S101-5中,若匹配成功,执行S101-6;若匹配失败,确定目标路径地址中,存在与JSON字符串包含的键值对中的键元素匹配失败的层级路径字段。
值得说明的是,在本申请实施例其他的一些实施方式中,目标路径地址中包含的键值对也可以采用其他的方式体现,比如在上述示例中,目标路径地址还可以表示为“member/age["name":"zhangsan"]”,这取决于预先为目标路径地址配置的解析规则。
可选地,作为另一种可能的实现方式,请参阅图5,图5为图3中S101的子步骤的另一种示意性流程图,若由S101-1确定出JSON字符串嵌套在当前最外层字符串为JSON数组,S101还可能包括以下子步骤:
S101-7,获得当前最外层字符串包含的所有JSON对象以及每一JSON对象各自的标识信息。
S101-8,在当前最外层字符串包含的所有JSON对象各自的标识信息中,匹配目标路径地址中当前最外层路径字段的值;若匹配成功,执行S101-6;若匹配失败,确定目标路径地址中,存在与JSON字符串包含的键值对中的键元素匹配失败的层级路径字段。
如上所述,由于在JSON字符串中,JSON数组中实际包裹的是JSON对象,本身是不存在键值对的,但可以将每一JSON对象作为值元素,且为每一JSON对象分配一个键元素,以使JSON数组中包含有键值对。
此时,若JSON字符串的当前最外层字符串为JSON数组,而在目标路径地址中,当前最外层路径字段的值不包含有键值对的形式时,比如在上述示例中,当前最外层字符串为[{"name":"zhangsan","age":30},{"name":"lisi","age":31}],而目标路径地址为“/member/#0/age”,且在匹配成功“member”所在的字段后,当前最外层路径字段为“#0”,则表征当前最外层路径字段是按照为JSON数组中的每一JSON对象分配键元素的方式进行解析的。
此时在解析JSON字符串中的当前最外层字符串时,不仅需要解析该当前最外层字符串,获得当前最外层字符串包含的所有JSON对象,还需要获得当前最外层字符串包含的所有JSON对象中,每一JSON对象各自的标识信息,其中,每一JSON对象各自的标识信息用于标识分配给每一JSON对象各自对应的键元素,比如说,在上述示例中,若当前最外层字符串为[{"name":"zhangsan","age":30},{"name":"lisi","age":31}],并且{"name":"zhangsan","age":30}和{"name":"lisi","age":31}两个JSON对象各自的标识信息分别为“#0”和“#1”,则“#0”和“#1”分别标识分配给{"name":"zhangsan","age":30}和{"name":"lisi","age":31}的键元素,也就是说,“#0”和“#1”并不是JSON字符串中实际存在的键元素,而是为了在JSON数组中构成键值对所分配出的键元素。
其中,标识信息分配的方式可以为按照预设的分配规律,比如根据JSON数组中每一JSON对象的排列顺序,由“#0”、“#1”、“#2”···依次分配,也可以是根据预设的算法进行分配,比如根据JSON数组中每一JSON对象的第一个键值对所计算得到的哈希值进行分配,只要在对目标路径地址进行解析时,若当前最外层字符串为JSON数组,且目标路径地址中当前最外层路径字段不包含有键值对,JSON数组中的每一JSON对象均具备有标识信息即可。
并且,值得说明的是,标识信息的分配可以是在解析目标路径地址之前,预先为JSON数组中的每一JSON对象分配的,也可以是在解析目标路径地址时,在当前最外层字符串为JSON数组,且目标路径地址中当前最外层路径字段不包含有键值对时,为JSON数组中的每一JSON对象分配。
相应地,在解析当前最外层字符串获得当前最外层字符串包含的所有JSON对象以及每一JSON对象各自的标识信息后,将每一JSON对象和各自的标识信息对应组合,则可将每一JSON对象均看做是“类键值对”,其中,JSON对象整体可作为“类键值对”中的值元素,而与JSON对象对应的标识可作为“类键值对”中的“键元素”,由此,则可以将JSON数组按照与JSON对象类似的解析方式,在当前最外层字符串包含的所有JSON对象各自的标识信息中,匹配目标路径地址中当前最外层路径字段的值;若匹配成功,则执行S101-6;反之,若匹配失败,则确定目标路径地址中,存在与JSON字符串包含的键值对中的键元素匹配失败的层级路径字段。
比如在上述目标路径地址为“/member/#0/age”的示例中,在当前最外层路径字段的值为“#0”,且解析JSON字符串中当前最外层字符串所获得的所有JSON对象包括:{"name":"zhangsan","age":30}和{"name":"lisi","age":31},两个JSON对象各自的标识信息为“#0”和“#1”,此时能够在在当前最外层字符串包含的所有JSON对象各自的标识信息中(“#0”和“#1”),匹配到目标路径地址中当前最外层路径字段的值(“#0”),则执行S101-6。
请继续参阅图3,S102,获得JSON字符串包含的键值对中,与目标层级路径字段的值相匹配的键元素作为目标键元素。
若目标路径地址中每一层级路径字段的值,与JSON字符串包含的键值对中的键元素均匹配,表征根据目标路径地址所索引的目标键元素在JSON字符串中是存在的,此时将JOSN字符串包含的键值对中,与目标路径字段中目标层级路径字段的值相匹配的键元素作为目标键元素。
由此,基于上述获得目标键元素的方式,在对JSON字符串进行操作时,尤其是在针对具有不同结构的多个JSON字符串进行操作时,可以按照本申请实施例提供的上述数据处理方法,将解析程序写死,而灵活地调整目标路径地址,通过解析目标路径地址的方式在JSON字符串中采用匹配定位的方式查找目标键元素,以降低JSON字符串与解析程序两者的耦合程度。
比如对于结构变化频繁的JSON字符串,可以将解析脚本存于数据库或者配置文件中,以使在解析不同的目标路径地址或者是不同的JSON字符串时,能够只需要根据脚本配置不同的目标路径地址即可,而不再需要修改程序代码或者是重新编译解析程序。
基于上述设计,本申请实施例所提供的一种数据处理方法,由接收的目标路径地址,将目标路径地址中每一层级路径字段的值,均与JSON字符串中包含的键值对中的键元素进行匹配,以根据目标路径地址,从JSON字符串中嵌套在最外层的键元素查找到目标键元素所在层,并在目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对中的键元素均匹配成功时,获得JSON字符串包含的键值对中,与目标层级路径字段的值相匹配的键元素作为目标键元素,以用于对JSON字符串的解析,相比于现有技术,在对不同的JSON字符串进行操作时,不再通过更新解析程序,而是将解析程序写死,灵活配置目标路径地址的方式,通过解析目标路径地址从而在JSON字符串中匹配定位查找获得目标键元素,能够降低JSON字符串与解析程序两者的耦合程度。
可选地,请继续参阅图3,作为一种可能的实现方式,该数据处理方法还包括以下步骤:
S103,获得与目标键元素对应的目标数据。
S104,获得对目标数据进行操作的目标操作指令。
S105,响应目标操作指令,对目标数据进行处理。
在根据目标路径地址匹配获得目标键元素后,再根据该目标键元素,获得与目标键元素对应的目标数据,其中,目标数据可以是与目标键元素对应的值元素,也可以是包含有目标键元素的键值对。比如在上述目标路径地址为“/member/#0/age”的示例中,目标数据则可以是“age”对应的值元素“30”,也可以是包含有“age”的键值对“"age":30”。
并且,在对JSON字符串的解析时,根据所获得的对目标数据进行操作的目标操作指令,响应该目标操作指令,对目标数据进行处理,其中,目标操作指令包括根据目标数据进行返回值、删除、更新中的至少之一。
并且,值得说明的是,S104与S100两者间并没有必然的先后顺序,可以是先执行S100再执行S104,也可以是先执行S104再执行S100,这取决于所涉及的应用场景或电子设备100中所存储的程序代码而定,比如说,在一些应用场景中,S104与S100可以一起执行。
比如,可以采用类似于SQL(Structured Query Language,结构化查询语言)的方式,定义对JSON字符串的操作。
例如,预先定义“select<目标路径地址>”为返回JSON字符串中位于目标路径地址下的值;预先定义“update<目标路径地址>=新值”为将JSON字符串中位于目标路径地址下的值更新为新值;预先定义“insert<插入值><定位符><目标路径地址>”为在JSON字符串中位于目标路径地址下,根据定位符插入新值,以更新JSON字符串;预先定义“delete<目标路径地址>”为删除在JSON字符串中位于目标路径地址下的值。
则根据上述语法和对目标路径地址的解析方法,假定获得的SQL语句为select</member/#0/age>,且JSON字符串为上述示例,则根据该SQL语句,所获得的结果为select</member/#0/age>=30;再例如,若获得的SQL语句为update</member/#0/age>=40,则根据该SQL语句,上述示例的JSON字符串中,{"name":"zhangsan","age":30}部分被修改为:{"name":"zhangsan","age":40}。
并且,还可以基于上述对目标路径地址的解析方法,预定义内置解析函数,一实现对JSON字符串的聚类计算。
比如,定义count函数,用于判断目标路径地址中包含的各个层级路径字段的值与JSON字符串相匹配的字段数量,count函数在实现时,比如采用count<目标路径地址>语句,将目标路径地址逐级解析,每当一层路径字段的值与JSON字符串中包含的键值对匹配成功,计数器加一,直至目标路径地址解析完成或者是某一层路径字段的值与JSON字符串中包含的键值对匹配失败,最后返回计数器所记录的值。
又或者,定义length函数,用于判断JSON字符串中JSON数组的长度,length函数在实现时,比如采用length<目标路径地址>语句,将目标路径地址逐级解析,每当JSON字符串中当前最外层字符串为JSON数组时,则获取JSON数组的长度,直至目标路径地址解析完成,将所获取到的长度作为返回值进行反馈。
又或者,定义exist函数,用于判断目标路径地址是否存在,exist函数在实现时,比如采用exist<目标路径地址>语句,将目标路径地址逐级解析,直至每一层级路径字段的值均在JSON字符串包含的键值对中匹配成功,设置表征目标路径地址存在的返回值,比如true;而若某一层级路径字段的值在JSON字符串包含的键值对中匹配失败,均结束匹配的过程,并设备表征目标路径地址不存在的返回值,比如false,并且,还可以将匹配失败的路径字段的值一并返回,用于提醒用户具体不存在的路径字段。
请继续参阅2,S106,反馈查找失败信息。
若由S101中判定目标路径地址中存在与JSON字符串包含的键值对中的键元素匹配失败的层级路径字段,则反馈查找失败信息,比如“目标路径地址输入错误”或者是“目标路径地址不存在”等提示信息。
请参阅图6,图6示出了本申请实施例所提供的一种数据处理装置200的一种示意性结构图,应用于对JSON字符串的数据处理,在本申请实施例中,该数据处理装置200包括收发模块201和处理模块202。
收发模块201用于接收目标路径地址,其中,目标路径地址表征在JSON字符串中从嵌套在最外层的键元素查找到目标键元素所在层的路径信息,目标路径地址包含至少一个层级的路径字段。
处理模块202用于将目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对中的键元素进行匹配。
可选地,作为一种可能的实现方式,处理模块202具体用于:
判断JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组;
若当前最外层字符串为JSON对象,获得当前最外层字符串包含的所有键元素;
若在当前最外层字符串包含的所有键元素中,匹配到目标路径地址中当前最外层路径字段的值,判断当前最外层路径字段是否为目标层级路径字段;
若当前最外层路径字段不为目标层级路径字段,将目标路径地址中,当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将当前最外层字符串中与当前键元素对应的值元素作为新的当前最外层字符串;
重复执行判断JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组的步骤,其中,当前键元素为最外层字符串包含的所有键元素中,与目标路径地址中当前最外层路径字段的值相匹配的键元素。
可选地,作为一种可能的实现方式,处理模块202还具体用于:
若当前最外层字符串为JSON数组,获得当前最外层字符串包含的所有JSON对象;
遍历当前最外层字符串包含的所有JSON对象,若在当前最外层字符串包含的所有JSON对象中,匹配到目标路径地址中当前最外层路径字段的值,判断当前最外层路径字段是否为目标层级路径字段;
若当前最外层路径字段不为目标层级路径字段,将目标路径地址中,当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将当前最外层字符串包含的所有JSON对象中的当前JSON对象作为新的当前最外层字符串;
重复执行判断JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组的步骤,其中,当前JSON对象为当前最外层字符串包含的所有JSON对象中,与目标路径地址中当前最外层路径字段的值相匹配的JSON对象。
可选地,作为一种可能的实现方式,处理模块202还具体用于:
若当前最外层字符串为JSON数组,获得当前最外层字符串包含的所有JSON对象以及每一JSON对象各自的标识信息,其中,每一JSON对象各自的标识信息用于标识分配给每一JSON对象各自对应的键元素;
若在当前最外层字符串包含的所有JSON对象各自的标识信息中,匹配到目标路径地址中当前最外层路径字段的值,判断当前最外层路径字段是否为目标层级路径字段;
若当前最外层路径字段不为目标层级路径字段,将目标路径地址中,当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将当前最外层字符串中与目标标识信息对应的JSON对象作为新的当前最外层字符串;
重复执行判断JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组的步骤;
其中,目标标识信息为最外层字符串包含的所有JSON对象各自的标识信息中,与目标路径地址中当前层级路径字段的值相匹配的标识信息。
可选地,作为一种可能的实现方式,处理模块202还具体用于:
删除目标路径地址中的当前最外层路径字段,以使当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段。
请继续参阅图6,处理模块202还用于,若目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对中的键元素均匹配,获得JSON字符串包含的键值对中,与目标层级路径字段的值相匹配的键元素作为目标键元素,其中,目标层级路径字段为目标路径地址中位于最后层级的路径字段。
可选地,作为一种可能的实现方式,处理模块202还用于,获得与目标键元素对应的目标数据,其中,目标数据为目标键元素对应的值元素或包含目标键元素的键值对。
收发模块201还用于,获得对目标数据进行操作的目标操作指令,其中,目标操作指令包括根据目标数据进行返回值、删除、更新中的至少之一。
处理模块202还用于,响应目标操作指令,对目标数据进行处理。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
综上所述,本申请实施例所提供的一种数据处理方法及装置,由接收的目标路径地址,将目标路径地址中每一层级路径字段的值,均与JSON字符串中包含的键值对中的键元素进行匹配,以根据目标路径地址,从JSON字符串中嵌套在最外层的键元素查找到目标键元素所在层,并在目标路径地址中每一层级路径字段的值与JSON字符串包含的键值对中的键元素均匹配成功时,获得JSON字符串包含的键值对中,与目标层级路径字段的值相匹配的键元素作为目标键元素,以用于对JSON字符串的解析,相比于现有技术,在对不同的JSON字符串进行操作时,不再通过更新解析程序,而是将解析程序写死,灵活配置目标路径地址的方式,通过解析目标路径地址从而在JSON字符串中匹配定位查找获得目标键元素,能够降低JSON字符串与解析程序两者的耦合程度。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其它的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
Claims (12)
1.一种数据处理方法,其特征在于,应用于对JSON字符串的数据处理,所述JSON字符串包括一个或多个键值对,所述键值对由键元素和值元素构成,所述方法包括:
接收目标路径地址,其中,所述目标路径地址表征在所述JSON字符串中从嵌套在最外层的键元素查找到目标键元素所在层的路径信息,所述目标路径地址包含至少一个层级的路径字段;
将所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素进行匹配;
若所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素均匹配,获得所述JSON字符串包含的键值对中,与目标层级路径字段的值相匹配的键元素作为所述目标键元素,其中,所述目标层级路径字段为所述目标路径地址中位于最后层级的路径字段。
2.如权利要求1所述的方法,其特征在于,所述将所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素进行匹配的步骤,包括:
判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组;
若所述当前最外层字符串为JSON对象,获得所述当前最外层字符串包含的所有键元素;
若在所述当前最外层字符串包含的所有键元素中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串中与当前键元素对应的值元素作为新的当前最外层字符串;
重复执行所述判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组的步骤,其中,所述当前键元素为所述最外层字符串包含的所有键元素中,与所述目标路径地址中所述当前最外层路径字段的值相匹配的键元素。
3.如权利要求2所述的方法,其特征在于,所述将所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素进行匹配的步骤,还包括:
若所述当前最外层字符串为JSON数组,获得所述当前最外层字符串包含的所有JSON对象;
遍历所述当前最外层字符串包含的所有JSON对象,若在所述当前最外层字符串包含的所有JSON对象中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串包含的所有JSON对象中的当前JSON对象作为新的当前最外层字符串;
重复执行所述判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组的步骤,其中,所述当前JSON对象为所述当前最外层字符串包含的所有JSON对象中,与所述目标路径地址中所述当前最外层路径字段的值相匹配的JSON对象。
4.如权利要求2所述的方法,其特征在于,所述将所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素进行匹配的步骤,还包括:
若所述当前最外层字符串为JSON数组,获得所述当前最外层字符串包含的所有JSON对象以及每一JSON对象各自的标识信息,其中,每一所述JSON对象各自的标识信息用于标识分配给每一所述JSON对象各自对应的键元素;
若在所述当前最外层字符串包含的所有JSON对象各自的标识信息中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串中与目标标识信息对应的JSON对象作为新的当前最外层字符串;
重复执行所述判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组的步骤;
其中,所述目标标识信息为所述最外层字符串包含的所有JSON对象各自的标识信息中,与所述目标路径地址中所述当前层级路径字段的值相匹配的标识信息。
5.如权利要求2或3或4所述的方法,其特征在于,所述将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段的步骤,包括:
删除所述目标路径地址中的所述当前最外层路径字段,以使所述当前最外层路径字段的下一层路径字段作为所述新的当前最外层路径字段。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:
获得与所述目标键元素对应的目标数据,其中,所述目标数据为所述目标键元素对应的值元素或包含所述目标键元素的键值对;
获得对所述目标数据进行操作的目标操作指令,其中,所述目标操作指令包括根据所述目标数据进行返回值、删除、更新中的至少之一;
响应所述目标操作指令,对所述目标数据进行处理。
7.一种数据处理装置,其特征在于,应用于对JSON字符串的数据处理,所述JSON字符串包括一个或多个键值对,所述键值对由键元素和值元素构成,所述装置包括:
收发模块,用于接收目标路径地址,其中,所述目标路径地址表征在所述JSON字符串中从嵌套在最外层的键元素查找到目标键元素所在层的路径信息,所述目标路径地址包含至少一个层级的路径字段;
处理模块,用于将所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素进行匹配;
所述处理模块还用于,若所述目标路径地址中每一层级路径字段的值与所述JSON字符串包含的键值对中的键元素均匹配,获得所述JSON字符串包含的键值对中,与目标层级路径字段的值相匹配的键元素作为所述目标键元素,其中,所述目标层级路径字段为所述目标路径地址中位于最后层级的路径字段。
8.如权利要求7所述的装置,其特征在于,所述处理模块具体用于:
判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组;
若所述当前最外层字符串为JSON对象,获得所述当前最外层字符串包含的所有键元素;
若在所述当前最外层字符串包含的所有键元素中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串中与当前键元素对应的值元素作为新的当前最外层字符串;
重复执行判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组,其中,所述当前键元素为所述最外层字符串包含的所有键元素中,与所述目标路径地址中所述当前最外层路径字段的值相匹配的键元素。
9.如权利要求8所述的装置,其特征在于,所述处理模块还具体用于:
若所述当前最外层字符串为JSON数组,获得所述当前最外层字符串包含的所有JSON对象;
遍历所述当前最外层字符串包含的所有JSON对象,若在所述当前最外层字符串包含的所有JSON对象中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串包含的所有JSON对象中的当前JSON对象作为新的当前最外层字符串;
重复执行判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组,其中,所述当前JSON对象为所述当前最外层字符串包含的所有JSON对象中,与所述目标路径地址中所述当前最外层路径字段的值相匹配的JSON对象。
10.如权利要求8所述的装置,其特征在于,所述处理模块还具体用于:
若所述当前最外层字符串为JSON数组,获得所述当前最外层字符串包含的所有JSON对象以及每一JSON对象各自的标识信息,其中,每一所述JSON对象各自的标识信息用于标识分配给每一所述JSON对象各自对应的键元素;
若在所述当前最外层字符串包含的所有JSON对象各自的标识信息中,匹配到所述目标路径地址中当前最外层路径字段的值,判断所述当前最外层路径字段是否为所述目标层级路径字段;
若所述当前最外层路径字段不为所述目标层级路径字段,将所述目标路径地址中,所述当前最外层路径字段的下一层路径字段作为新的当前最外层路径字段,以及将所述当前最外层字符串中与目标标识信息对应的JSON对象作为新的当前最外层字符串;
重复执行判断所述JSON字符串嵌套在当前最外层字符串为JSON对象或是JSON数组;
其中,所述目标标识信息为所述最外层字符串包含的所有JSON对象各自的标识信息中,与所述目标路径地址中所述当前层级路径字段的值相匹配的标识信息。
11.如权利要求8或9或10所述的装置,其特征在于,所述处理模块还具体用于:
删除所述目标路径地址中的所述当前最外层路径字段,以使所述当前最外层路径字段的下一层路径字段作为所述新的当前最外层路径字段。
12.如权利要求8所述的装置,其特征在于,
所述处理模块还用于,获得与所述目标键元素对应的目标数据,其中,所述目标数据为所述目标键元素对应的值元素或包含所述目标键元素的键值对;
所述收发模块还用于,获得对所述目标数据进行操作的目标操作指令,其中,所述目标操作指令包括根据所述目标数据进行返回值、删除、更新中的至少之一;
所述处理模块还用于,响应所述目标操作指令,对所述目标数据进行处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811512555.9A CN109766100A (zh) | 2018-12-11 | 2018-12-11 | 数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811512555.9A CN109766100A (zh) | 2018-12-11 | 2018-12-11 | 数据处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109766100A true CN109766100A (zh) | 2019-05-17 |
Family
ID=66450527
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811512555.9A Pending CN109766100A (zh) | 2018-12-11 | 2018-12-11 | 数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109766100A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110990223A (zh) * | 2019-11-27 | 2020-04-10 | 中诚信征信有限公司 | 一种基于系统日志的监控告警方法及装置 |
CN111061482A (zh) * | 2019-10-24 | 2020-04-24 | 贝壳技术有限公司 | 字符串中参数的解析方法、装置、存储介质及电子设备 |
CN111339093A (zh) * | 2020-02-25 | 2020-06-26 | 京东方科技集团股份有限公司 | 用户行为数据的获取方法、装置、设备及存储介质 |
CN112131291A (zh) * | 2020-09-11 | 2020-12-25 | 重庆誉存大数据科技有限公司 | 基于json数据的结构化解析方法、装置、设备及存储介质 |
CN112328843A (zh) * | 2020-10-30 | 2021-02-05 | 深圳市元征科技股份有限公司 | 一种查找odx中重写的通讯参数的方法及相关装置 |
CN117032726A (zh) * | 2023-10-10 | 2023-11-10 | 北京海格神舟通信科技有限公司 | 一种用于实时绘制频谱图的方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108008936A (zh) * | 2017-12-04 | 2018-05-08 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置及电子设备 |
CN108073391A (zh) * | 2016-11-11 | 2018-05-25 | 阿里巴巴集团控股有限公司 | 一种json字符串传输、处理的方法及设备 |
-
2018
- 2018-12-11 CN CN201811512555.9A patent/CN109766100A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108073391A (zh) * | 2016-11-11 | 2018-05-25 | 阿里巴巴集团控股有限公司 | 一种json字符串传输、处理的方法及设备 |
CN108008936A (zh) * | 2017-12-04 | 2018-05-08 | 北京奇艺世纪科技有限公司 | 一种数据处理方法、装置及电子设备 |
Non-Patent Citations (4)
Title |
---|
JZX555: "数据结构:Trie树(前缀树)原理及C++实现", 《HTTPS://BLOG.CSDN.NET/WEIXIN_41427400/ARTICLE/DETAILS/79949422》 * |
LWG_1540652358: "使用 JSONPath 解析 JSON 完整内容详解", 《HTTPS://BLOG.CSDN.NET/LWG_1540652358/ARTICLE/DETAILS/84111339》 * |
PIERRE BOURHIS ET AL.: "JSON: Data model, Query languages and Schema specification", 《HTTP://DX.DOI.ORG/10.1145/3034786.3056120》 * |
烟伤肺: "Trie树的JS或TS实现", 《HTTPS://WWW.JIANSHU.COM/P/BA70CA95C33B》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061482A (zh) * | 2019-10-24 | 2020-04-24 | 贝壳技术有限公司 | 字符串中参数的解析方法、装置、存储介质及电子设备 |
CN111061482B (zh) * | 2019-10-24 | 2023-12-08 | 贝壳技术有限公司 | 字符串中参数的解析方法、装置、存储介质及电子设备 |
CN110990223A (zh) * | 2019-11-27 | 2020-04-10 | 中诚信征信有限公司 | 一种基于系统日志的监控告警方法及装置 |
CN111339093A (zh) * | 2020-02-25 | 2020-06-26 | 京东方科技集团股份有限公司 | 用户行为数据的获取方法、装置、设备及存储介质 |
CN112131291A (zh) * | 2020-09-11 | 2020-12-25 | 重庆誉存大数据科技有限公司 | 基于json数据的结构化解析方法、装置、设备及存储介质 |
CN112131291B (zh) * | 2020-09-11 | 2023-12-15 | 重庆誉存大数据科技有限公司 | 基于json数据的结构化解析方法、装置、设备及存储介质 |
CN112328843A (zh) * | 2020-10-30 | 2021-02-05 | 深圳市元征科技股份有限公司 | 一种查找odx中重写的通讯参数的方法及相关装置 |
CN112328843B (zh) * | 2020-10-30 | 2023-09-05 | 深圳市元征科技股份有限公司 | 一种查找odx中重写的通讯参数的方法及相关装置 |
CN117032726A (zh) * | 2023-10-10 | 2023-11-10 | 北京海格神舟通信科技有限公司 | 一种用于实时绘制频谱图的方法及系统 |
CN117032726B (zh) * | 2023-10-10 | 2023-12-22 | 北京海格神舟通信科技有限公司 | 一种用于实时绘制频谱图的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109766100A (zh) | 数据处理方法及装置 | |
CN108496190B (zh) | 用于从电子数据结构中提取属性的注释系统 | |
CN107122368A (zh) | 一种数据校验方法、装置及电子设备 | |
KR100638695B1 (ko) | 구조화 문서의 데이터를 검색하는 장치 및 방법 | |
CN103810224B (zh) | 信息持久化和查询方法及装置 | |
US20030088577A1 (en) | Database and method of generating same | |
CN108710662A (zh) | 语言转换方法和装置、存储介质、数据查询系统和方法 | |
CN106202548A (zh) | 数据存储方法、查找方法及装置 | |
JP6736450B2 (ja) | データ分析支援装置及びデータ分析支援システム | |
CN100354863C (zh) | 大规模关键词匹配的方法和系统 | |
JP2019503541A5 (zh) | ||
US20150161728A1 (en) | System for determining hs commodity classification code | |
CN108475481A (zh) | Puf标识符赋值和测试方法及设备 | |
CN107423391A (zh) | 网页结构化数据的信息提取方法 | |
CN106599280B (zh) | 确定网页节点路径信息的方法及装置 | |
US20110191756A1 (en) | Code string search apparatus, search method, and program | |
CN110209585A (zh) | 一种软件测试用例智能训练方法,终端及存储介质 | |
CN108008936A (zh) | 一种数据处理方法、装置及电子设备 | |
CN109240936A (zh) | 应用程序的兼容性测试方法、终端设备及介质 | |
CN110209780A (zh) | 一种问题模板生成方法、装置、服务器及存储介质 | |
CN112347316A (zh) | 基于GraphSAGE的不良嗜好行为检测方法、装置及电子设备 | |
US20090204889A1 (en) | Adaptive sampling of web pages for extraction | |
CN104268176A (zh) | 一种基于搜索关键词的推荐方法及系统 | |
US20090282071A1 (en) | System and method for building a datastore for storing and retrieving regression testing data for a complex application | |
JP2012221489A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190517 |
|
RJ01 | Rejection of invention patent application after publication |