掌桥专利:专业的专利平台
掌桥专利
首页

技术领域

本说明书实施例涉及计算机技术领域,特别涉及一种解析JSON数据的方法。本说明书一个或者多个实施例同时涉及一种解析JSON数据的装置,一种计算设备,以及一种计算机可读存储介质。

背景技术

为适应越来越多的联邦分析需求,一些数据库引入了对外部数据源的支持。在外部数据源中,主要是以jsonline形式存在的JSON数据。Jsonline,是一种以token(标记)为基本成分的数据格式。

在查询JSON数据时,需要使用JSON数据解析器对JSON数据进行解析。目前,一般采取DOM式解析风格,即首先完整的解析json数据,包括所有token及对应的值,之后在内存中构造一种Document Object Tree。但是,DOM式解析会浪费大量的内存,比较低效。因此,如何高效地解析JSON数据成为了提升数据库性能的关键。

发明内容

有鉴于此,本说明书施例提供了一种解析JSON数据的方法。本说明书一个或者多个实施例同时涉及一种解析JSON数据的装置,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的技术缺陷。

根据本说明书实施例的第一方面,提供了一种解析JSON数据的方法,包括:在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。

可选地,所述JSON数据对应数据库中表的数据;所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据包括:在逐token地解析JSON数据时,判断当前解析到的token是否对应查询请求指定的列;如果不对应,则确定当前解析到的token不存在所述查询请求需要的数据;如果对应,解析得到token的值,根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取;如果不需要,则确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。

可选地,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据包括:在逐token地解析JSON数据时,如果当前解析到的token的值需要被所述查询请求获取,取得所述token的值;判断是否已经取得所述查询请求需要的所有取值;如果是,确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。

可选地,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否不存在所述查询请求需要的数据包括:在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否属于所述信息对应的token类型;如果不是,确定当前解析到的token不存在所述查询请求需要的数据。

可选地,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否属于所述信息对应的token类型包括:在逐token地解析JSON数据时,根据查询请求指定了列,判断当前解析到的token是否属于数组类型或者对象类型的token。

可选地,所述判断当前解析到的token是否对应查询请求指定的列包括:如果当前解析到的token是数组类型的token,获取所述token对应的数组的下标作为列的编号;判断所述列的编号是否为查询请求指定的列的编号。

可选地,所述判断当前解析到的token是否对应查询请求指定的列包括:如果当前解析到的token是对象类型token,获取所述token的对象名称;将所述token的对象名称作为列名,判断所述列名是否在数据表中具有对应的列;如果有,获取对应的列的编号;判断所述列的编号是否为查询请求指定的列的编号。

可选地,所述判断当前解析到的token是否对应查询请求指定的列的步骤,以及,所述根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取的步骤,通过预定义接口请求外界模块来执行。

根据本说明书实施例的第二方面,提供了一种解析JSON数据的装置,包括:解析判断模块,被配置为在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据。值解析跳过模块,被配置为如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析。解析结束模块,被配置为如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。

根据本说明书实施例的第三方面,提供了一种计算设备,包括:存储器和处理器;所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。

根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该计算机指令被处理器执行时实现本说明书任意实施例所述解析JSON数据的方法的步骤。

本说明书一个实施例提供了解析JSON数据的方法,由于该方法在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据,如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析,如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析,从而本说明书实施例提供的方法通过逐token地解析,根据查询请求的信息,跳过无关数据的解析,避免了在内存中构造完整的Document Object Tree,在可行情况下提早终止对JSON数据的解析,从而可大幅降低JSON数据的解析耗时,实现了高效解析JSON数据的目的。

附图说明

图1是本说明书一个实施例提供的一种解析JSON数据的方法的流程图;

图2是本说明书一个实施例提供的JSON数据解析器状态流转示意图;

图3是本说明书一个实施例提供的一种解析JSON数据的装置的结构示意图;

图4是本说明书另一个实施例提供的一种解析JSON数据的装置的结构示意图;

图5是本说明书一个实施例提供的一种计算设备的结构框图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。

在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

首先,对本说明书一个或多个实施例涉及的名词术语进行解释。

token(标记),词法分析常用的一种概念,是组成JSON数据最基本的成分。

在本说明书中,提供了一种解析JSON数据的方法,本说明书同时涉及一种解析JSON数据的装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。

图1示出了根据本说明书一个实施例提供的一种解析JSON数据的方法的流程图,包括步骤102至步骤106。

步骤102:在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据。

步骤104:如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析。

步骤106:如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。

可见,本说明书实施例提供的方法通过逐token地解析,根据查询请求的信息,跳过无关数据的解析,避免了在内存中构造完整的Document Object Tree,在可行情况下提早终止对JSON数据的解析,从而可大幅降低JSON数据的解析耗时,实现了高效解析JSON数据的目的。例如,根据本说明书实施例提供的方法实现的JSON数据解析器可以应用于OLAP(联机分析处理)场景下,加速解析JSON数据,进而提升OLAP的性能。

本说明书实施例中,结束对JSON数据的解析,是对输入的一串JSON数据的提前终止解析,即不再解析这串JSON数据的剩余内容,如果还有下一串JSON数据,则可以开始解析下一串JSON数据。跳过对当前解析到的token的值的解析,意味着可以跳过当前解析到的token的值的解析,如果这串JSON数据还有下一token,可以进入下一token的解析。

需要说明的是,本说明书实施例提供的方法中,根据查询请求指定的信息来判断是否跳过token的值的解析和/或提前结束解析,其具体实施方式可以结合JSON数据在实际应用场景中的使用方式来决定,本说明书实施例对此并不进行限制。

例如,由于在查询请求需要的所有取值已经取得时,无需继续解析JSON数据,因此,本说明书一个或多个实施例中,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据可以包括:如果当前解析到的token的值需要被所述查询请求获取,取得所述token的值;判断是否已经取得所述查询请求需要的所有取值;如果是,确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。

又例如,在数据库引入JSON数据的应用场景下,所述JSON数据对应数据库中表的数据。例如,若干串JSON数据与数据库某个表关联,该表的数据同时就是这些JSON数据串。JSON数据中的数组类型、对象类型的token通常用来与列对应。由于列是查询请求中的关键信息,例如,查询请求中通常会指定列,以及针对列的值的查询条件。因此,在该应用场景下,如果发现当前解析到的token对应的列在本次查询中并不被需要,那么便可以跳过对token对应的值的解析,如果对应的列在本次查询中需要,再判断当前解析到的列值是否在查询条件需要的范围内,若列值不在范围内,则意味着当前JSON串不符合要求,此时可以提早终止对当前JSON串的解析,从而可大幅降低对JSON数据的解析耗时,达到性能提升的目的。

具体地,例如,所述在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据可以包括:在逐token地解析JSON数据时,判断当前解析到的token是否对应查询请求指定的列;如果不对应,则确定当前解析到的token不存在所述查询请求需要的数据;如果对应,解析得到token的值,根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取;如果不需要,则确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。

以当前解析到的token是数组类型的token为例,可以获取所述token对应的数组的下标作为列的编号;判断所述列的编号是否为查询请求指定的列的编号。例如,在JSON数据包含例如“[1,2,3,4]”这样的数组类型的token时,解析到“[”时,可以获取对应的数组的下标作为列的编号。由于JSON数据中数组类型的token对应的下标是其在表中对应列的编号,从而可以利用该列的编号判断这一列是否被查询指定,若这一列并没有被查询指定,则可以跳过对值的解析,如果被查询指定,则可以继续判断该token的值是否在查询请求指定的查询条件的范围内,如果不在,则可以结束对该串JSON数据的解析。

以当前解析到的token是对象类型的token为例,可以获取所述token的对象名称;将所述token的对象名称作为列名,判断所述列名是否在数据表中具有对应的列;如果有,获取对应的列的编号;判断所述列的编号是否为查询请求指定的列的编号。例如,在JSON数据包含例如“{"column1":1,"column2":2,"column3":3,"column4":4}”这样的对象类型的token时,解析到“{”时,可以获取"column1"作为列名。由于JSON数据中对象类型的token的对象名称是其在表中对应列的名称,从而可以利用该对象名称查询出列的编号,进而利用该列的编号判断这一列是否被查询指定,若这一列并没有被查询指定,则可以跳过对值的解析,如果被查询指定,则可以继续判断该token的值是否在查询请求指定的查询条件的范围内,如果不在,则可以结束对该串JSON数据的解析。

需要说明的是,JSON数据中包含的token类型是多种多样的,一般包括:数组、对象、字符串、数值、布尔、空值等类型。而查询请求所需要的数据通常是指定的信息对应的token类型,其他类型的token则不属于查询请求指定的信息对应的token类型,在解析时,可直接跳过对其值的解析,进而提高解析性能。因此,本说明书一个或多个实施例中,在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否属于所述信息对应的token类型;如果不是,确定当前解析到的token不存在所述查询请求需要的数据。

JSON数据也可以支持嵌套,如对象值中可能嵌套数组,数组值中又可能嵌套对象。在数据库引入JSON数据的应用场景中,对应列的token最底层要么是数组,要么是对象,否则一定是查询请求不需要的数据。因此,本说明书一个或多个实施例中,在逐token地解析JSON数据时,可以根据查询请求指定了列,判断当前解析到的token是否属于数组类型或者对象类型的token,如果不是,跳过对当前解析到的token的值的解析。

例如,在输入的JSON数据的内容为:'{"col1":[1,2,{"key":"value"}],"col2":{"key":"value"}}'。如果查询请求指定的列是“col2”,那么在解析过程中,会跳过对`[`,`1`,`2`,`{`,`"key"`,`"value"`,`}`,`]`这些token流的值的解析,解析“col2”及其对应的值。可见,根据本说明书实施例提供的方法实现的JSON数据解析器可大幅降低对json数据的分析耗时,提高解析性能。

本说明书一个或多个实施例中,为了提高JSON数据解析器的可扩展性,根据本说明书实施例提供的方法实现的JSON数据解析器可以通过一组预先定义接口来与外界模块通信。所述判断当前解析到的token是否对应查询请求指定的列的步骤,以及,所述根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取的步骤,通过预定义接口请求外界模块来执行。从而JSON数据解析器可以专注于对token的解析,跳过某些token的解析或提前结束解析的判断,可以由外界模块来执行,进而降低了JSON数据解析器与系统的耦合性,使其适用于任意类型的数据库系统的加速查询,提高JSON数据解析器的可扩展性。

为了使上述实施例更加易于理解,下述结合附图2所示的JSON数据解析器状态流转示意图,对本说明书实施例提供的方法基于状态流转机制以及外界模块进行JSON数据解析的实施例进行详细说明。如图2所示,JSON数据解析器的状态流转机制中,在JSON数据中包括数组类型的token的情况下,状态流转机制至少包括:初始状态、数组开始状态、数组取值状态;在JSON数据中包括对象类型的token的情况下,状态流转机制至少包括:对象开始状态、取对象名状态、跳过取值状态、需要取值状态、对象已取值状态。

InitState(初始状态),JSON数据解析器在IniState状态下,流式逐个token地解析输入的JSON数据。根据本说明书实施例提供的方法,在IniState状态下,如果当前解析到的token不是数组类型或对象类型的token,则跳过对当前解析到的token的值的解析,继续解析下一个token。因此,在遇到数组类型或对象类型的token之前,JSON数据解析器会跳过遇到的token流的值的解析。JSON数据解析器响应于遇到数组类型数据的开始token如“StarArrToken”时,进入ArrStarted状态;在遇到对象类型数据的开始token如“StartObjToken”时,进入ObjStarted状态。

首先,对图2所示的状态流转机制在遇到数组类型数据的开始token情况下的状态流转进行详细说明:

ArrStarted(数组开始状态):

JSON数据解析器响应于在ArrStarted状态下,遇到数组值token“ValueToken”,相应进入ValueGot状态。

JSON数据解析器响应于在ArrStarted状态下,遇到数组类型数据的结束token“EndArrToken”,相应进入InitState状态。

ValueGot(数组取值状态):

JSON数据解析器响应于进入ValueGot状态,获取“ValueToken”中value对应的数组的下标作为列的编号,通过预定义接口请求外界模块来执行所述判断列的编号是否为查询请求指定的列的编号的步骤。

所述JSON数据解析器响应于在ValueGot状态下接收到所述外界模块返回的第一否定结果,执行“ContParse”即对当前解析到的token的下一token进行解析,进入ArrStarted状态。所述第一否定结果表示列的编号不是查询请求指定的列。

所述JSON数据解析器响应于在ValueGot状态下接收到所述外界模块返回的第一肯定结果,通过预定义接口请求外界模块来执行判断当前解析到的token的值是否需要被所述查询请求获取的步骤。所述第一肯定结果表示列的编号是查询请求指定的列。

所述JSON数据解析器响应于在ValueGot状态下接收到所述外界模块返回的第二肯定结果,取得“ValueToken”中保存的值,判断是否已经取得所述查询请求需要的所有取值,如果是,执行“StopParse”即结束对所述JSON数据的解析,且所述JSON数据解析器进入InitState状态。如果否,执行“ContParse”即对当前解析到的token的下一token进行解析,进入ArrStarted状态,所述第二肯定结果表示token的值需要被所述查询请求获取。

所述JSON数据解析器响应于在ValueGot状态下接收到所述外界模块返回的第二否定结果,执行“StopParse”即结束对所述JSON数据的解析,且所述JSON数据解析器进入InitState状态。所述第二否定结果表示token的值不需要被所述查询请求获取。

下面,在对图2所示的状态流转机制在遇到对象类型数据的开始token情况下的状态流转进行详细说明:

ObjStarted,(对象开始状态):

所述JSON数据解析器响应于在ObjStarted状态下遇到对象类型数据的键token“KeyToken”,进入KeyGot状态。

所述JSON数据解析器响应于在ObjStarted状态下遇到对象类型数据的结束token“EndObjToken”,进入InitState状态。

KeyGot(取对象名状态):

所述JSON数据解析器响应于进入KeyGot状态,获取当前解析到的对象类型数据的键token的键,该键即是对象名称。所述JSON数据解析器通过预定义接口请求外界模块来执行所述将token的对象名称作为列名,判断所述列名是否在数据表中具有对应的列步骤,以及,所述如果有,获取对应的列的编号的步骤,以及,所述判断列的编号是否为查询请求指定的列的编号的步骤。

所述JSON数据解析器响应于在KeyGot状态下接收到所述外界模块返回的第三否定结果,进入IgnoreValue状态。所述第三否定结果表示列名不是在数据表中的列或者列的编号不是查询请求指定的列,即该键是“UnusedKey”。

所述JSON数据解析器响应于在KeyGot状态下接收到所述外界模块返回的第三肯定结果,所述第三肯定结果表示列的编号是查询请求指定的列,即该键是“UsedKey”,进入NeedValue状态。

IgnoreValue(跳过取值状态):

所述JSON数据解析器响应于进入IgnoreValue状态,表明值不被需要,相应的token不需要解析,因此,跳过对象值token“ValueToken”的解析,对下一token进行解析,进入ObjStarted状态。

NeedValue(需要取值状态):

所述JSON数据解析器响应于进入NeedValue状态,对对象值token“ValueToken”进行解析,得到对象值,进入KeyValueGot状态。

KeyValueGot(对象已取值状态):

所述JSON数据解析器响应于进入KeyValueGot状态,通过预定义接口请求外界模块来执行所述判断当前解析到的token的值是否需要被所述查询请求获取的步骤。

所述JSON数据解析器响应于在KeyValueGot状态下接收到所述外界模块返回的第四肯定结果,所述第四肯定结果表示当前解析到的token的值需要被所述查询请求获取,判断是否已经取得所述查询请求需要的所有取值,如果是,执行“StopParse”即结束对所述JSON数据的解析且所述JSON数据解析器,进入InitState状态,如果否,执行“ContParse”即对当前解析到的token的下一token进行解析,进入ObjStarted状态。

需要说明的是,图2中示出的StartArrToken、EndArrToken等token可以是JSON数据中通过json规范指定了语义的token,本说明书实施例提供的方法中提到的token也可以是其他未提到的token,这里不再赘述。

通过上述实施例可见,本说明书实施例提供的方法基于状态流转机制以及外界模块进行JSON数据解析,解析性能高效而且扩展性强,可用于任意数据库系统JSON数据查询的加速。通过token-by-token的方式基于上述状态流转机制流式地解析输入的JSON数据,从列级过滤角度分析性能提升可见,在解析过程中,如果发现当前token对应的列在本次查询中并不被需要,便跳过对token对应的值的解析,如果在解析过程中发现本次查询所需要的列都已经收集完毕了,便提早结束对当前行JSON串的解析,解析性能得到较大提升。从行级过滤角度分析性能提升可见,根据查询请求指定的列的查询条件来判断当前解析到的列值是否在查询条件要求的范围内,若不在范围内,则意味着当前JSON串不符合要求,此时也会提早结束对当前行JSON串的解析,解析性能又得到进一步提升。因此,基于本说明书实施例提供的方法,能够大幅加速JSON数据的解析。

与上述方法实施例相对应,本说明书还提供了解析JSON数据的装置实施例,图3示出了本说明书一个实施例提供的一种解析JSON数据的装置的结构示意图。如图3所示,该装置包括:解析判断模块302、值解析跳过模块304及解析结束模块306。

该解析判断模块302,可以被配置为在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据。

该值解析跳过模块304,可以被配置为如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析。

该解析结束模块306,可以被配置为如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。

本说明书实施例提供的装置通过逐token地解析,根据查询请求的信息,跳过无关数据的解析,避免了在内存中构造完整的Document Object Tree,在可行情况下提早终止对JSON数据的解析,从而可大幅降低JSON数据的解析耗时,实现了高效解析JSON数据的目的。

图4示出了本说明书另一个实施例提供的一种解析JSON数据的装置的结构示意图。

例如,在数据库引入JSON数据的应用场景下,所述JSON数据对应数据库中表的数据。在该应用场景下,如图4所示,所述解析判断模块302可以包括:列对应判断子模块3022、列否定子模块3024、列肯定子模块3026及条件排除子模块3028。

该列对应判断子模块3022,可以被配置为在逐token地解析JSON数据时,判断当前解析到的token是否对应查询请求指定的列。

该列否定子模块3024,可以被配置为如果所述列对应判断子模块3022判定不对应,确定当前解析到的token不存在所述查询请求需要的数据。

该列肯定子模块3026,可以被配置为如果所述列对应判断子模块3022判定对应,解析得到token的值,根据查询请求指定的查询条件,判断当前解析到的token的值是否需要被所述查询请求获取。

该条件排除子模块3028,可以被配置为如果所述列肯定子模块3026判定不需要,则确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。

在该应用场景下,如果发现当前解析到的token对应的列在本次查询中并不被需要,那么便可以跳过对token对应的值的解析,如果对应的列在本次查询中需要,再判断当前解析到的列值是否在查询条件需要的范围内,若列值不在范围内,则意味着当前JSON串不符合要求,此时可以提早终止对当前JSON串的解析,从而可大幅降低对JSON数据的解析耗时,达到性能提升的目的。

再例如,由于在查询请求需要的所有取值已经取得时,无需继续解析JSON数据,因此,本说明书一个或多个实施例中,如图4所示,所述解析判断模块302可以包括:取值子模块3030、取值判断子模块3032及取值结束子模块3034。

该取值子模块3030,可以被配置为在逐token地解析JSON数据时,如果当前解析到的token的值需要被所述查询请求获取,取得所述token的值。

该取值判断子模块3032,可以被配置为判断是否已经取得所述查询请求需要的所有取值。

该取值结束子模块3034,可以被配置为如果所述取值判断子模块3032判定为是,确定所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据。

需要说明的是,JSON数据中包含的token类型是多种多样的,而查询请求所需要的数据通常是指定的信息对应的token类型,其他类型的token则不属于查询请求指定的信息对应的token类型,在解析时,可直接跳过对其值的解析,进而提高解析性能。因此,本说明书一个或多个实施例中,如图4所示,所述解析判断模块302可以包括:标记类型判断子模块3036及标记类型否定子模块3038。

该标记类型判断子模块3036,可以被配置为在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token是否属于所述信息对应的token类型。

该标记类型否定子模块3038,可以被配置为如果所述标记类型判断子模块3036判定为不是,确定当前解析到的token不存在所述查询请求需要的数据。

例如,所述标记类型判断子模块3036,可以被配置为在逐token地解析JSON数据时,根据查询请求指定了列,判断当前解析到的token是否属于数组类型或者对象类型的token。

以当前解析到的token是数组类型的token为例,如图4所示,所述列对应判断子模块3022可以包括:数组编号获取子模块3022a及列编号判断子模块3022b。

该数组编号获取子模块3022a,可以被配置为如果当前解析到的token是数组类型的token,获取所述token对应的数组的下标作为列的编号。

该列编号判断子模块3022b,可以被配置为判断所述列的编号是否为查询请求指定的列的编号。

以当前解析到的token是对象类型的token为例,如图4所示,所述列对应判断子模块3022可以包括:对象名获取子模块3022c、列名判断子模块3022d、对象编号获取子模块3022e及列编号判断子模块3022b。

该对象名获取子模块3022c,可以被配置为如果当前解析到的token是对象类型token,获取所述token的对象名称。

该列名判断子模块3022d,可以被配置为将所述token的对象名称作为列名,判断所述列名是否在数据表中具有对应的列。

该对象编号获取子模块3022e,可以被配置为如果所述列名判断子模块3022d判定为有,获取对应的列的编号。

该列编号判断子模块3022b,可以被配置为判断所述对象编号获取子模块3022e获取的列的编号是否为查询请求指定的列的编号。

上述为本实施例的一种解析JSON数据的装置的示意性方案。需要说明的是,该解析JSON数据的装置的技术方案与上述的解析JSON数据的方法的技术方案属于同一构思,解析JSON数据的装置的技术方案未详细描述的细节内容,均可以参见上述解析JSON数据的方法的技术方案的描述。

图5示出了根据本说明书一个实施例提供的一种计算设备500的结构框图。该计算设备500的部件包括但不限于存储器510和处理器520。处理器520与存储器510通过总线530相连接,数据库550用于保存数据。

计算设备500还包括接入设备540,接入设备540使得计算设备500能够经由一个或多个网络560通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备540可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。

在本说明书的一个实施例中,计算设备500的上述部件以及图5中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图5所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。

计算设备500可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备500还可以是移动式或静止式的服务器。

其中,处理器520用于执行如下计算机可执行指令:

在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;

如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;

如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。

上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的解析JSON数据的方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述解析JSON数据的方法的技术方案的描述。

本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时以用于:

在逐token地解析JSON数据时,根据查询请求指定的信息,判断当前解析到的token和/或所述JSON数据剩余未解析的部分是否不存在所述查询请求需要的数据;

如果当前解析到的token不存在所述查询请求需要的数据,跳过对当前解析到的token的值的解析;

如果所述JSON数据剩余未解析的部分不存在所述查询请求需要的数据,结束对所述JSON数据的解析。

上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的解析JSON数据的方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述解析JSON数据的方法的技术方案的描述。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。

相关技术
  • 解析JSON数据的方法以及装置
  • json数据解析方法、装置及计算机可读存储介质
技术分类

06120113256217