发明内容
本发明的目的是克服现有技术中存在的不足,提供一种基于JSON的机构养老数据交互方法及***,其能简化数据交互方式,提高数据传输效率,保证数据通信安全。
按照本发明提供的技术方案,所述基于JSON的机构养老数据交互方法,包括手持终端以及与所述手持终端能进行养老数据交互的养老服务器;所述手持终端与养老服务器间的数据交互采用JSON数据格式。
在采用JSON数据格式进行养老数据交互时,确定待交换养老数据的数据包协议格式,并对确定数据包协议格式的养老数据进行数据包封装,以得到JSONObject的封装数据包,对所述封装数据包再依次进行压缩与加密,以得到压缩加密数据包,以通过压缩加密数据包在手持终端与养老服务器间进行所需的数据交互。
所述确定待交换养老数据的数据包协议格式包括类型码、业务数据、删除数据以及更新数据。
一种基于JSON的机构养老数据交互***,包括手持终端以及与所述手持终端能进行养老数据交互的养老服务器;所述手持终端与养老服务器间的数据交互采用JSON数据格式。
在采用JSON数据格式进行养老数据交互时,确定待交换养老数据的数据包协议格式,并对确定数据包协议格式的养老数据进行数据包封装,以得到JSONObject的封装数据包,对所述封装数据包再依次进行压缩与加密,以得到压缩加密数据包,以通过压缩加密数据包在手持终端与养老服务器间进行所需的数据交互。
所述确定待交换养老数据的数据包协议格式包括类型码、业务数据、删除数据以及更新数据。
本发明的优点:所述手持终端与养老服务器间的数据交互采用JSON数据格式,能简化数据交互方式,提高数据传输效率,保证数据通信安全。
具体实施方式
下面结合具体附图和实施例对本发明作进一步说明。
如图1所示:为了能简化数据交互方式,提高数据传输效率,本发明基于JSON的机构养老数据交互***,包括手持终端以及与所述手持终端能进行养老数据交互的养老服务器;所述手持终端与养老服务器间的数据交互采用JSON数据格式。
具体地,JavaScript Object Notation(以下简称JSON)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式。JSON采用两种结构:1)“名称/值”对的集合,“名称/值”能表示对象的属性,对象实际上就是属性的集合,所以这个结构可以用来表示对象,在典型的JSON格式中采用“{}”来表示一个JSON对象。2)、值的有序列表,可以表示对象的集合,所以JSON能够表示一个复杂对象的集合。在典型的JOSN格式中,采用“[]”来表示JSON数组。基于JAVA平台中已经有了比较成熟的用于处理JSON数据的相关类库,如org.json包能很方便的生成和解析JSON。
在采用JSON数据格式进行养老数据交互时,确定待交换养老数据的数据包协议格式,并对确定数据包协议格式的养老数据进行数据包封装,以得到JSONObject的封装数据包,对所述封装数据包再依次进行压缩与加密,以得到压缩加密数据包,以通过压缩加密数据包在手持终端与养老服务器间进行所需的数据交互。本发明实施例中,手持终端可以为现有常用的智能手机、智能平板等终端设备,数据交互是指手持终端与养老服务器间数据相互传输,即手持终端与养老服务器间的数据交互中均采用JSON数据格式。在手持终端向养老服务器传输数据时,手持终端需要将压缩加密数据包传输至养老服务器内;而养老服务器向手持终端传输数据时,养老服务器需要将压缩加密数据包传输至手持终端。而养老服务器或手持终端接收到压缩加密数据包后,需要对压缩加密数据包进行对应的解密以及解析过程,下面对具体的实施过程进行详细说明。
在确定养老数据的数据包协议格式时,所述数据包协议是一个JSONObject对象,包含OperationCode(类型码)、OperationData(业务数据)、DeleteData(删除数据)及UpdateData(更新数据)四个字段,所述字段是根据手持终端和养老服务器的数据同步要求,结合养老机构的业务需求特点而确定。具体格式如下表一所示。
表一:数据包协议格式
OperationCode类型码为一个值,表明数据交互中的各种操作及状态,分为上传状态码和下载状态码两大类。其中,上传状态码用于手持终端向服务器端发送请求,表明手持终端进行业务操作类型,如登录认证、数据更新等;下载状态码用于养老服务器端向手持终端返回响应数据,表明养老服务器在进行业务操作时的各种状态,如密码错误、网络异常等。所述类型码是由机构养老管理***的业务需求而决定的,随着业务的扩展而动态调整。下面将以***登录过程为例,介绍此***的数据交互过程。登录过程中用到的业务类型码如表二所示。
OperationData业务数据是一个JSONObject对象,不同的类型码对应着不同的属性。如登录时上传类型码为Login,业务数据中所包含的数据为用户名、密码及机构编码三个属性,这就能唯一确定此用户与养老机构的隶属关系。
DeleteData删除数据及UpdateData更新数据均为一个JSONArray对象,用于手持终端和养老服务器之间数据同步。本发明实施例中,采用的是基于时间戳的数据同步机制,当手持终端向养老服务器发出数据更新请求时,对应的类型码为Refresh,业务数据为包含此时手持终端的时间戳t;养老服务器经过解析之后得到此时间戳t,然后根据此时间戳t与养老服务器各个业务表的时间戳t比较,若是存在比此时间戳t还大的业务表,则将对应的业务数据按照协议包格式封装到UpdateData字段或者DeleteData字段之中。手持终端解析协议包,若上述两个字段有对应的内容,则手持终端进行对应的数据删除或者数据***操作来保持数据的一致性。
数据包封装模是按照上述数据包协议格式进行数据拼装,数据包协议就是一个JSONObject,各个字段又根据需求嵌套了JSONObject、JSONArray等。基于java的org.json包提供了一系列简单的方法和工具用于处理JSON数据。其中org.json.JSONbject类提供了多种构造器来构建JSONbject,使用put方法来添加名值对、get方法获得字段所对应的值或对象等。例如当手持终端登录时,此时上传类型码为Login,操作数据为用户名、密码及养老机构编号这三个数据。由于此时既没有要删除的数据也没有要更新的数据,所以上述两个字段为空,上述的具体实施过程为本技术领域人员所熟知,此处不再详述。
数据压缩主要目的是减少手持终端流量及节省服务器端宽带,其逆过程为解压缩。在养老机构管理***实际应用过程中,一方面手持终端在初次初始化数据时需要向养老服务器请求大量基础数据;另一方面手持终端需要频繁的向养老服务器上传老人护理情况等业务操作信息。基于此种情况考虑将数据进行压缩后传输,减少数据传输量,节省服务器宽带。
在JAVA平台中有java.util.zip包中的Deflater类和Inflater类提供了基于DEFLATE算法的压缩和解压的相关方法,它们通过JNI技术调用ZLIB压缩库支持一般的压缩需求。压缩通过Deflater类提供支持,主要包括两个步骤。首先将压缩的字符串转化为字节数组,在本发明实施例中,通过getBytes()方法完成字符串到字节数组的转换,在换换后设置压缩策略及压缩速度在压缩器中执行压缩。压缩策略取决于压缩内容的特征,可选的有FILTERED,最适用于主要由小值组成并具有某种程度随意分布的数据的压缩策略;HUFFMAN_ONLY,仅适用于Huffman编码的压缩策略;以及通用的默认压缩策略DEFAULT_STRATEGY,在本发明实施例中采用此级别。压缩级别有0到9十个级别可选,0表示没有压缩,9代表最佳压缩效果,具体如图2所示。
数据加密主要保证数据通信的安全性,其逆过程为解密。加解密对象是经过封装的协议包数据。在本发明实施中,采用对称加密算法对字节流进行加密,对称加密是指加密和解密使用相同的密钥。基于java的加解密框架JCF提供了一系列用于加密和解密的工具,核心类为Cipher。调用getInstance(“DES”)生成Cipher对象,指定此加密器采用DES加密算法,也可以指定其他方式的加密算法如AES/RSA;然后调用init()方法对Cipher对象进行初始化,同时设置加密密钥及加密模式(加密或解密);最后调用doFinal()进行实际的加密或解密,这取决于初始化时设置的加密模式。若初始化模式是加密,则doFinal进行加密;若初始化的模式是解密,则进行解密,如图4所示。
本发明实施例中,在数据交换中,在接收到压缩解密数据包后,需要进行解密、解压缩以及解析过程,其中,解密过程为上述加密过程的逆过程,解密过程根据上述加密过程进行确定,具体过程为本技术领域人员所熟知,此处不再赘述。解压缩是压缩的逆过程,用Inflater类充当解压器。首先将要解压的字符串转化为字节数组,然后将其输入到解压器中,输出为原始的字节数组,再通过toString()方法将其还原为原始的字符串。需要注意的是在解压时压缩策略和压缩级别必须和压缩时设置的值一致,同时字符转字节必须要指定相同的编码方式,如图3所示。
数据解析模块是对数据封装模块的逆运算,完成对协议包的解析。解析将协议包数据首先得构建JSONObject对象,然后通过协议包中的各个字段名获得其具体的值或对象,据此来进行下一步的业务操作。例如当获得上述协议包时,首先使用JSONObject(String)构建JSONObject对象,调用get(“OperationCode”)获得类型码为Login,得知为登录认证业务操作;然后调用getJSONObject(“OperationData”)得到登录认证所需数据,根据用户名密码及养老机构编码获得对应数据。
若是登录认证出了问题,例如密码或用户名不正确,则上述OperationCode对应的值为LOGIN_ERROR,表明登录信息有误。其他的字段为空,然后按照JSON数据封装过程,将此内容作为登录错误协议包返回给手持终端。手持终端按照上述JSON数据解析,获得登录状态码为LOGIN_ERROR,然后提示手持终端用户名或密码错误。
下面通过手持终端和养老服务器端的一次数据交互过程来对本发明的工作过程进行说明。首先,手持终端在发送请求之前,需要按照JSON封装模块的要求把发送的业务数据按照数据包协议封装为JSONObject。其次经过压缩模块对封装好的数据进行压缩,然后经过加密对压缩后的数据进行加密,最后将加密输出的数据发送出去。
养老服务器接受到请求之后,首先要对其进行解密,并将解密之后的数据作为解压的输入,然后通过JSON解析模块取得协议包定义的字段,并据此来判断是否需要进行业务处理,若需要则进行压缩和加密之后向手持终端发送养老服务器的响应,否则这次通信过程结束。