一种解析JSON数据的方法及装置与流程

文档序号:11155382
一种解析JSON数据的方法及装置与制造工艺

本发明涉及软件开发技术领域,尤其涉及一种解析JSON数据的方法及装置。



背景技术:

在App(Application,应用)开发过程中,一般会使用到网络通信模块,网络通信模块经常用于通过HTTP(Hyper Text Transport Protocol,超文本传输协议)来传递JSON数据。当接收到JSON数据的时候,一般需要开发人员根据具体的数据接口对接收到的JSON数据进行解析,然后将解析好的JSON数据重新封装成数据对象来进行进一步处理。

由于数据对象的不同,常规方案都是开发者自己对JSON数据进行解析,然后将解析的数据封装成对应的数据对象。这个过程在App开发过程中的使用是非常频繁的,每次通信过程由于数据类型的不同,导致开发需要将解析过程不断的编写,极大的增加了开发者的工作量。同时由于代码数量的不断增加,导致后期维护也很难维护,且容易出现解析错误。



技术实现要素:

本申请实施例通过提供一种解析JSON数据的方法及装置,解决了现有技术中采用人工的方式对JSON数据进行解析,存在容易出现解析错误的技术问题。

一方面,本申请通过本申请的一实施例提供如下技术方案:

一种解析JSON数据的方法,应用于解析JSON数据的装置中,包括:

获取JSON数据;

获取与所述JSON数据对应的数据类型信息;

基于所述数据类型信息,确定指定数据类型,所述指定数据类型即为所述JSON数据需要转换成的数据对象的类型;

将所述JSON数据转换为所述指定数据类型的数据对象。

优选地,所述指定数据类型,包括:

整数Integer类型;或

长整数Long类型;或

浮点数Float类型;或

对象Objcet类型。

优选地,在所述基于所述数据类型信息,确定指定数据类型之前,还包括:

判断所述JSON数据是否为空,其中,所述JSON数据为String类型;

若不是空,则去除所述JSON数据中的空格。

优选地,所述将所述JSON数据转换为所述指定数据类型的数据对象,包括:

若所述指定数据类型为Integer类型,则调用Integer.valueOf(msg)函数将所述JSON数据转换成Integer类型的数据对象;或

若所述指定数据类型为Long类型,则调用Long.valueOf(msg)函数将所述JSON数据转换成Long类型的数据对象;或

若所述指定数据类型为Float类型,则调用Float.valueOf(msg)函数将所述JSON数据转换成Float类型的数据对象;或

若所述指定数据类型为Objcet类型,则调用JSON.parseObject(msg,clazz)函数将所述JSON数据转换成Objcet类型的数据对象。

优选地,所述获取JSON数据,包括:

接收加密数据,所述加密数据采用预设加密方式进行加密;

基于与所述预设加密方对应的预设解密方式,对所述加密数据进行解密,获得所述JSON数据。

优选地,所述预设加密方式,具体为:

获取当前时间;

将所述当前时间对10取余数,获得所述当前时间的最后两位数字,并将所述最后两位数字作为关键值;

提取所述JSON数据中的每个字符;

获取所述JSON数据中的每个字符对应的ASCII码;

将所述JSON数据中的每个字符对应的ASCII码都减去所述关键值,获得所述加密数据。

优选地,所述基于与所述预设加密方对应的预设解密方式,对所述加密数据进行解密,获得所述JSON数据,包括:

获取当前时间;

将所述当前时间对10取余数,获得所述当前时间的最后两位数字,并将所述最后两位数字作为关键值;

提取所述加密数据中的每个字符;

获取所述加密数据中的每个字符对应的ASCII码;

将所述加密数据中的每个字符对应的ASCII码都加上所述关键值,获得所述JSON数据。

优选地,所述获取当前时间,包括:

调用system.currentTimeMillis()函数获取所述当前的时间。

另一方面,基于同一发明构思,本申请通过本申请的一实施例,提供如下技术方案:

一种解析JSON数据的装置,包括:

获取单元,用于获取JSON数据以及与所述JSON数据对应的数据类型信息;

确定单元,用于基于所述数据类型信息,确定指定数据类型,所述指定数据类型即为所述JSON数据需要转换成的数据对象的类型;

转换单元,用于将所述JSON数据转换为所述指定数据类型的对象;

返回单元,用于返回所述指定数据类型的数据对象。

优选地,所述指定数据类型,包括:

整数Integer类型;或

长整数Long类型;或

浮点数Float类型;或

对象Objcet类型。

优选地,所述解析JSON数据的装置,还包括:

判断单元,用于在所述基于所述数据类型信息,确定指定数据类型之前,判断所述JSON数据是否为空,其中,所述JSON数据为String类型;

去除单元,用于若不是空,则去除所述JSON数据中的空格。

优选地,所述转换单元,包括:

第一转换子单元,用于若所述指定数据类型为Integer类型,则调用Integer.valueOf(msg)函数将所述JSON数据转换成Integer类型的数据对象;或

第二转换子单元,用于若所述指定数据类型为Long类型,则调用Long.valueOf(msg)函数将所述JSON数据转换成Long类型的数据对象;或

第三转换子单元,用于若所述指定数据类型为Float类型,则调用Float.valueOf(msg)函数将所述JSON数据转换成Float类型的数据对象;或

第四转换子单元,用于若所述指定数据类型为Objcet类型,则调用JSON.parseObject(msg,clazz)函数将所述JSON数据转换成Objcet类型的数据对象。

优选地,所述获取单元,包括:

接收子单元,用于接收加密数据,所述加密数据采用预设加密方式进行加密;

解密子单元,用于基于与所述预设加密方对应的预设解密方式,对所述加密数据进行解密,获得所述JSON数据。

优选地,所述预设加密方式,具体为:

获取当前时间;将所述当前时间对10取余数,获得所述当前时间的最后两位数字,并将所述最后两位数字作为关键值;提取所述JSON数据中的每个字符;获取所述JSON数据中的每个字符对应的ASCII码;将所述JSON数据中的每个字符对应的ASCII码都减去所述关键值,获得所述加密数据。

优选地,所述解密子单元,具体用于:

获取当前时间;将所述当前时间对10取余数,获得所述当前时间的最后两位数字,并将所述最后两位数字作为关键值;提取所述加密数据中的每个字符;获取所述加密数据中的每个字符对应的ASCII码;将所述加密数据中的每个字符对应的ASCII码都加上所述关键值,获得所述JSON数据。

优选地,所述解密子单元,具体用于:

调用system.currentTimeMillis()函数获取所述当前的时间。

本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:

1、在本发明实施例中,公开了一种解析JSON数据的方法,应用于解析JSON数据的装置中,包括:获取JSON数据以及与所述JSON数据对应的数据类型信息;基于所述数据类型信息,确定指定数据类型,所述指定数据类型即为所述JSON数据需要转换成的数据对象的类型;将所述JSON数据转换为所述指定数据类型的数据对象。由于可以自动将JSON数据转换成任意对象数据,无需开发者再自己实现JSON转换的过程,降低了出现解析错误的几率。从而解决了现有技术中采用人工的方式对JSON数据进行解析,存在容易出现解析错误的技术问题。实现了降低解析JSON数据出现解析错误的几率,且调用简单,使用方便的技术效果。

2、在本发明实施例中,通过泛型的使用使得本方案能够将String类型的JSON数据转换成任意类型的数据对象。

3、在本发明实施例中,封装了JSON数据的解析过程,大大提高了代码的复用性。

4、在本发明实施例中,智能对数据进行判定,无需人为手动再去根据不同的类型调用不同的解析方式,降低开发者的工作量。

5、在本发明实施例中,通过自定义的加解密方法,能够有效的保证JSON数据在传输中的安全性。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中一种解析JSON数据的方法的流程图;

图2为本发明实施例中一种解析JSON数据的装置的结构图。

具体实施方式

本申请实施例通过提供一种解析JSON数据的方法及装置,解决了现有技术中采用人工的方式对JSON数据进行解析,存在容易出现解析错误的技术问题。

本申请实施例的技术方案为解决上述技术问题,总体思路如下:

一种解析JSON数据的方法,应用于解析JSON数据的装置中,包括:获取JSON数据以及与所述JSON数据对应的数据类型信息;基于所述数据类型信息,确定指定数据类型,所述指定数据类型即为所述JSON数据需要转换成的数据对象的类型;将所述JSON数据转换为所述指定数据类型的数据对象。

为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。

实施例一

本实施例提供了一种解析JSON数据的方法,应用于一解析JSON数据的装置中,该装置可以是运行在电子设备(例如;电脑、或掌上电脑或、智能手机等等)上的一应用程序。

如图1所示,所述解析JSON数据的,包括:

步骤S101:获取JSON数据以及与JSON数据对应的数据类型信息。

JSON:英文全称为JavaScript Object Notation,是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。

在具体实施过程中,获取到的JSON数据为String(字符串)型数据,该JSON数据可以是开发人员录入的,也可以是接收其它设备(例如:服务器)发来的。

作为一种可选的实施方式,步骤S101,包括:接收加密数据,加密数据采用预设加密方式进行加密;基于与预设加密方对应的预设解密方式,对加密数据进行解密,获得JSON数据。

在具体实施过程中,出于保密性的考虑,发送端在发送JSON数据时,可以采用加密的方式对JSON数据加密后再发送。

作为一种可选的实施方式,所述预设加密方式,具体是指:获取当前时间(单位为:毫秒);将当前时间对10取余数,获得当前时间的最后两位数字,并将最后两位数字作为关键值key;提取JSON数据中的每个字符;获取JSON数据中的每个字符对应的ASCII码;将JSON数据中的每个字符对应的ASCII码都减去关键值key,获得加密数据。

在具体实施过程中,可以调用system.currentTimeMillis()函数获取当前的时间,该当前时间表示的是当前计算机时间与GMT时间(格林威治时间,即1970年1月1号0时0分0秒)所差的毫秒数。

在具体实施过程中,JSON数据为String型数据,可以提取JSON数据中的每个字符,再获取JSON数据中的每个字符对应的ASCII码(例如:字符“a”的ASCII码为数字“97”,字符“b”的ASCII码为数字“98”,字符c的ASCII码为数字“99”,等等)。

对应地,接收端接收到所述加密数据后,可以基于与该预设加密方对应的预设解密方式,对加密数据进行解密,获得JSON数据。具体来讲,可以获取当前时间(单位:毫秒);将当前时间对10取余数,获得当前时间的最后两位数字,并将最后两位数字作为关键值;提取加密数据中的每个字符;获取加密数据中的每个字符对应的ASCII码;将加密数据中的每个字符对应的ASCII码都加上关键值,获得的新的字符组成一字符串,即获得JSON数据。

在本发明实施例中,通过自定义的加解密方法能够有效的保证JSON数据在传输中的安全性。在具体实施过程中,该数据类型信息可以是开发人员录入的,该数据类型信息用于表示指定数据类型。

步骤S102:基于数据类型信息,确定指定数据类型,该指定数据类型即为JSON数据需要转换成的数据对象的类型。

作为一种可选的实施方式,在步骤S103之前,还包括:判断JSON数据是否为空,其中,JSON数据为String类型;若不是空,则去除JSON数据中的空格。

在具体实施过程中,可以判断JSON数据中的字符串是否是空的,如果是空的直接返回,不做任何处理,如果不是空的才会对此做进一步的处理,即将字符串中的空格去除掉,具体来讲,可以调用trim()函数来去除字符串中空格。

在具体实施过程中,该指定数据类型可以为:String(字符串)类型,Integer(整数)类型,或Long(长整数)类型,或Float(浮点数)类型,或Objcet(对象)类型,等等。

举例来讲,在判定class是否和String是同一个类型时,可以通过将String的类和class来进行对比判定的。具体判定方式是class==String.class,如果是相同的将会返回真,如果不是相同的将会返回假。

举例来讲,在判定class是否和Integer是同一个类型时,可以通过将Integer的类和class来进行对比判定的。具体判定方式是class==Integer.class,如果是相同的将会返回真,如果不是相同的将会返回假。

举例来讲,在判定class是否和Long是同一个类型,可以通过将Long的类和class来进行对比判定的。具体判定方式是class==Long.class,如果是相同的将会返回真,如果不是相同的将会返回假。

举例来讲,在判定class是否和Float是同一个类型,可以通过将Float的类和class来进行对比判定的。具体判定方式是class==Float.class,如果是相同的将会返回真,如果不是相同的将会返回假。

举例来讲,Objcet类型的判定和上述判定有一定的差异性,Objcet类型在JOSN中存储是以“{}”来包裹的,所以如果一个类型是一个Objcet类型,那么可以判定是否以“{”开头,如果是以“{”开头的,我们则判定其为Objcet类型。具体判定字符串是不是以“{”开头的方法是通过调用startsWith()函数来进行判定的,如果这个函数返回真,说明是Objcet类型,如果这个函数返回假说明不是不是Objcet类型。

在本发明实施例中,智能对数据进行判定,无需人为手动再去根据不同的类型调用不同的解析方式,降低开发者的工作量。

步骤S103:将JSON数据转换为指定数据类型的数据对象。

在具体实施过程中,步骤S103,可以由以下方式实现:

(A)如果指定数据类型为String类型,由于JSON数据就是一个String对象,所以此处可以直接将对象进行返回即可。

(B)若指定数据类型为Integer类型,则调用Integer.valueOf(msg)函数将JSON数据转换成Integer类型的数据对象。这样,就是将msg(用于表示JSON数据)这个String对象转换成了对应的Integer对象了。

(C)若指定数据类型为Long类型,则调用Long.valueOf(msg)函数将JSON数据转换成Long类型的数据对象,其中,msg用于表示JSON数据。这样,就将msg这个String对象转换成了对应的Long对象了。

(D)若指定数据类型为Float类型,则调用Float.valueOf(msg)函数将JSON数据转换成Float类型的数据对象,其中,msg用于表示JSON数据。这样,就将msg这个String对象转换成了对应的Float对象了。

(E)若指定数据类型为Objcet类型,则调用JSON.parseObject(msg,clazz)函数将JSON数据转换成Objcet类型的数据对象,其中,msg用于表示JSON数据。这样,就将msg这个String对象转换成了对应的Objcet对象了。

步骤S104:返回该指定数据类型的数据对象。

在具体实施过程中,在将JSON数据转换为指定数据类型的数据对象后,即可返回该指定数据类型的数据对象给开发人员。

作为一种可选的实施例,可以定义一个函数JSON2Object,这个函数封装了上述步骤S101~步骤S105的功能。

具体来讲,JSON2Object函数的定义如下:

public static<T>T JSON2Object(String JSON,Class<T>class)

接下来对上述函数进行详尽的解释:

<T>:表示泛型类型,这个是Java语言所支持的一个特性,这个特性叫做泛型。泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。简单理解泛型就是一个动态类型,可以根据调用者传入的类型返回传入类型相同的数据类型。

T:表示返回的数据类型就是我们定义的泛型类型。

JSON2Object:表示的是函数名称

JSON:表示传入需要解析的JSON数据

Class<T>class:表示一个类对象,这个类对象有个特点,那就是该类对象必须是泛型T类型的。后续在处理逻辑中会根据class对象生成对应的泛型对象。

在本发明实施例中,通过泛型的使用使得本方案能够将String类型的JSON数据转换成任意的数据对象。

在本发明实施例中,封装了JSON数据的解析过程,大大提高了代码的复用性。

下面,基于同一发明构思,本实施例提供了一种解析JSON数据的装置,如图2所示,包括:

获取单元201,用于获取JSON数据以及与JSON数据对应的数据类型信息;

确定单元202,用于基于数据类型信息,确定指定数据类型,指定数据类型即为JSON数据需要转换成的数据对象的类型;

转换单元203,用于将JSON数据转换为指定数据类型的对象;

返回单元204,用于返回指定数据类型的数据对象。

作为一中可选的实施例,所述指定数据类型,包括:

整数Integer类型;或

长整数Long类型;或

浮点数Float类型;或

对象Objcet类型。

作为一中可选的实施例,所述解析JSON数据的装置,还包括:

判断单元,用于在基于数据类型信息,确定指定数据类型之前,判断JSON数据是否为空,其中,JSON数据为String类型;

去除单元,用于若不是空,则去除JSON数据中的空格。

作为一中可选的实施例,转换单元204,包括:

第一转换子单元,用于若指定数据类型为Integer类型,则调用Integer.valueOf(msg)函数将JSON数据转换成Integer类型的数据对象;或

第二转换子单元,用于若指定数据类型为Long类型,则调用Long.valueOf(msg)函数将JSON数据转换成Long类型的数据对象;或

第三转换子单元,用于若指定数据类型为Float类型,则调用Float.valueOf(msg)函数将JSON数据转换成Float类型的数据对象;或

第四转换子单元,用于若指定数据类型为Objcet类型,则调用JSON.parseObject(msg,clazz)函数将JSON数据转换成Objcet类型的数据对象。

作为一中可选的实施例,获取单元201,包括:

接收子单元,用于接收加密数据,加密数据采用预设加密方式进行加密;

解密子单元,用于基于与预设加密方对应的预设解密方式,对加密数据进行解密,获得JSON数据。

作为一中可选的实施例,预设加密方式,具体为:

获取当前时间;将当前时间对10取余数,获得当前时间的最后两位数字,并将最后两位数字作为关键值;提取JSON数据中的每个字符;获取JSON数据中的每个字符对应的ASCII码;将JSON数据中的每个字符对应的ASCII码都减去关键值,获得加密数据。

作为一中可选的实施例,解密子单元,具体用于:

获取当前时间;将当前时间对10取余数,获得当前时间的最后两位数字,并将最后两位数字作为关键值;提取加密数据中的每个字符;获取加密数据中的每个字符对应的ASCII码;将加密数据中的每个字符对应的ASCII码都加上关键值,获得JSON数据。

作为一中可选的实施例,解密子单元,具体用于:

调用system.currentTimeMillis()函数获取当前的时间。

由于本实施例所介绍的解析JSON数据的装置为实施本申请实施例中解析JSON数据的方法所采用的装置,故而基于本申请实施例中所介绍的解析JSON数据的方法,本领域所属技术人员能够了解本实施例的解析JSON数据的装置的具体实施方式以及其各种变化形式,所以在此对于该解析JSON数据的装置如何实现本申请实施例中的方法不再详细介绍。只要本领域所属技术人员实施本申请实施例中解析JSON数据的方法所采用的解析JSON数据的装置,都属于本申请所欲保护的范围。

上述本申请实施例中的技术方案,至少具有如下的技术效果或优点:

1、在本发明实施例中,公开了一种解析JSON数据的方法,应用于解析JSON数据的装置中,包括:获取JSON数据以及与所述JSON数据对应的数据类型信息;基于所述数据类型信息,确定指定数据类型,所述指定数据类型即为所述JSON数据需要转换成的数据对象的类型;将所述JSON数据转换为所述指定数据类型的数据对象。由于可以自动的Json数据转换成任意对象数据,无需开发者再自己实现JSON转换的过程,降低了出现解析错误的几率。从而解决了现有技术中采用人工的方式对JSON数据进行解析,存在容易出现解析错误的技术问题。实现了降低解析JSON数据出现解析错误的几率,且调用简单,使用方便的技术效果。

2、在本发明实施例中,通过泛型的使用使得本方案能够将String类型的JSON数据转换成任意类型的数据对象。

3、在本发明实施例中,封装了JSON数据的解析过程,大大提高了代码的复用性。

4、在本发明实施例中,智能对数据进行判定,无需人为手动再去根据不同的类型调用不同的解析方式,降低开发者的工作量。

5、在本发明实施例中,通过自定义的加解密方法,能够有效的保证JSON数据在传输中的安全性。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1