Skip to content

Android数据解析之Gson封装,防止服务端返回异常信息导致的崩溃问题,保证客户端正常运行。我们或多或少会遇到 server端 某些字段的数据类型与 客户端 不一致,导致json解析失败,从而引发崩溃问题,造成很不好的用户体验 该库有以下几个作用 1)、一行代码实现数据的系列化或反系列化 2)、当某个字段解析失败后,可跳转下一个字段继续解析,可保证部分功能 正常使用, 3)、某个字段解析失败后,给默认值,如果是基本数据类型,如int ,则默认值为0,boolean默认值为false,如果是array类型,默认为[],即空集合 4)、某些异常数据可正常解析,如服务端某个字段的值是一个经过转义的json,即是一个字符串,可正常解析成对OBJECT或者ARRAY,再比如说我们要的是Str…

Notifications You must be signed in to change notification settings

htmssfh/data_format_serialization

Repository files navigation

数据解析工具类

源码分析请查看

一、功能

1.1 Json解析

Gson解析工具库,防止服务端返回异常信息导致的崩溃问题,保证客户端正常运行, Android开发主要基于Java开发(属于强类型语言),不少公司开发的语言为php(属于弱类型语言), 所以经常会因为server端某些字段的数据类型与客服端这边不一致,导致json解析失败,从而引发崩溃问题,造成很不好的用户体验

主要有两个功能:

1)、当某个字段解析失败后,可跳转下一个字段继续解析,至少可保证部分功能 可以正常使用, 2)、某个字段解析失败后,给默认值,如果是基本数据类型,如int ,则默认值为0,boolean默认值为false,如果是array类型,默认为[],即空集合

支持解析实体、集合、Map、基本数据类型等 在 异常情况下, 处理为默认值 ,主要支持情况如下

  1. 要{},后端给了 []、空字符串、字符串、数字、boolean, 均返回null ,不会崩溃,使用时需要判空,否则会崩溃

    1.1、传入非标准json格式、传入html的格式或其它非json格式,会直接报异常 JsonSyntaxException

  2. 要[]后端给了 {}、空字符串、字符串、数字、boolean,均返回null ,不会崩溃,使用时需要判空,否则会崩溃

    2.1、toObjectArray,传入非标准json格式、传入html的格式或其它非json格式,不会报异常,会直接返回null

    2.2、toArraysList,如果数据格式不是[],会报异常,使用时请关注

  3. 要int.class, Integer.class,short.class, Short.class,long.class, Long.class,double.class, Double.class, float.class, Float.class 等情况

    3.1、后端给的非数字类型,如空字符串、字符串、boolean、array、object 等,解析返回0;

    3.1、给的数据 超过 实际类型 的取值范围,如定义int ,值不能超过 2147483647 ,超过解析返回0 ,所以定义类型时一定考虑数据的取值范围;

    3.3、要int/short/long,服务端给的float/double ,解析返回0,所以服务端经的数据可能为浮点类型时,最好使用float或者double

  4. 要String

    4.1、如果后端给了[]、{},则返回""

    4.2,如果后端给了[]或者{}里面有数据,会解析返回实际的字符串

    4.3,如果后端给了基本数据类型或者boolean类型,则会将其转成String类型

  5. 要map对象 ,后端给了[]、空字符串、字符串、boolean、数字,均返回null ,不会崩溃,使用时需要判空,否则会崩溃

  6. 要boolean,服务端给byte/int/short/long/float/double/array/object/字符串,解析返回false

  7. 要byte/short/int/long/boolean/float/double/String/map/object/array ,server端给返回null/字符串null的情况

    7.1,基本数据和String类型,解析成默认类型

    7.2,map/object/array类型,解析成null

  8. 目前已知的三种崩溃情况

    7.1,传入xml CommonJsonBuilder

    7.2,传入一个字符串

    7.3,传入一个错误的json

Gson-2.8.5

xml解析

正开发中。。。

二.更新日志

1.0.7

1、解决一些引用出错的问题

1.0.6

1、toObjectArray传入非标准json格式、传入html的格式或其它非json格式,不会报异常,会直接返回null,使用时判空

2、修改JSONObject中的源码,支持可以传入null的情况

3、要String ,server给了objct或者array ,object或array 中有null的情况,toJson后原样返回给 fe或server

1.0.5

1、要byte/short/int/long/boolean/float/double/String,服务端给null、字符串null, 解析成各自的默认值

2、map/object/array,服务端给null、字符串null,解析返回null ,toJson后会抛弃为null的字段, 如果解析后,还需要将原数据给server端,服务端如需要处理这个为null的情况时 就可能导致错误,原因就是toJson后为null的字段会被抛弃

1.0.4

1、要object/array/map ,server返回格式不对,则解析返回null ,使用时需要判空

1.0.3

1、添int 适配bug

1.0.2

1、添加log输出,方便调试

1.0.1

1、支持boolean和byte的自定义适配 2、JsonObject和JsonArray 转义问题处理

1.0.0

1、初次发布远程依赖版本,支持的功能如上描述

三、使用

3.1、将JitPack存储库添加到您的构建文件中(项目根目录下build.gradle文件)

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

3.2、添加依赖

dependencies {
    implementation 'com.github.fangyeren:data_format_serialization:1.0.7'
}

四、API

更详细的使用请查看demo

//LogTagsUtils.setLogLevel(true)  //打开日志输出,Loge 代表格式不对解析成默认值,
                                  //Logi输出的信息代表该格式可以正常解析到数据,没有输出肯定是正常解析到数据了

TestEntity objectAa =  CommonJsonBuilder.toObject(aa,TestEntity.class);
Log.e("dataparse","objectAa.toString()======="+CommonJsonBuilder.toJson(objectAa));

TestEntity objectBb =  CommonJsonBuilder.toObject(bb,TestEntity.class);
Log.e("dataparse","objectBb.toString()======="+CommonJsonBuilder.toJson(objectBb));

ArrayList<TestArrayBean> arrayCc = (ArrayList<TestArrayBean>) CommonJsonBuilder.toObjectArray(cc, TestArrayBean.class);
Log.e("dataparse","arrayCc.toString()======="+CommonJsonBuilder.toJson(arrayCc));

List<TestArrayBean> list =  CommonJsonBuilder.toArraysList(xml, TestArrayBean[].class);
ArrayList<TestArrayBean> arrayCc = new ArrayList<>(list);
Log.e("dataparse","arrayCc.toString()===111===="+CommonJsonBuilder.toJson(arrayCc));

五、混淆


#---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }

-dontwarn com.google.gson.**
-keep class com.google.gson.**{*;}
##---------------End: proguard configuration for Gson  ----------


# 另外解析的对象需要添加不混淆代码

About

Android数据解析之Gson封装,防止服务端返回异常信息导致的崩溃问题,保证客户端正常运行。我们或多或少会遇到 server端 某些字段的数据类型与 客户端 不一致,导致json解析失败,从而引发崩溃问题,造成很不好的用户体验 该库有以下几个作用 1)、一行代码实现数据的系列化或反系列化 2)、当某个字段解析失败后,可跳转下一个字段继续解析,可保证部分功能 正常使用, 3)、某个字段解析失败后,给默认值,如果是基本数据类型,如int ,则默认值为0,boolean默认值为false,如果是array类型,默认为[],即空集合 4)、某些异常数据可正常解析,如服务端某个字段的值是一个经过转义的json,即是一个字符串,可正常解析成对OBJECT或者ARRAY,再比如说我们要的是Str…

Resources

Stars

Watchers

Forks

Packages

No packages published