json属性值为null时转换

首先感恩原创:https://www.cnblogs.com/fei-android/p/5580954.html

app客户端中,发现平台上新添加的栏目在客户端上无法显示,经过处理之后才发现是返回的json字符串中有一个属性值为空出现的问题。当属性值为null时,json解析就会中断,导致接下来的数据无法正确获取。原则上来讲服务器端发送的json字符串不允许存在属性值为空的情况,但是如果服务器端发送了null的属性值,客户端也必须要解决。


解决思路:将属性值 null 转换成""


目前app用的是sdk自带的json来解析,为了便于使用,使用了Google推荐的gson框架来解析

解决方法如下

1.经过搜索可以用下面的方法

Gson gson = new GsonBuilder().serializeNulls().create();

但是这个却无法解决反序列问题,怎么解决呢?我在stackoverflow上找到了这个问题,亲测有效、

http://stackoverflow.com/questions/9483348/gson-treat-null-as-empty-string/24252578#24252578

2.解决办法如下

Gson gson  = new GsonBuilder().registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();
//然后用上面一行写的gson来序列化和反序列化实体类type
gson.fromJson(json, type);
gson.toJson(type);

//NullStringToEmptyAdapterFactory的代码

public class NullStringToEmptyAdapterFactory implements TypeAdapterFactory {
    @SuppressWarnings("unchecked")
    public  TypeAdapter create(Gson gson, TypeToken type) {
        Class rawType = (Class) type.getRawType();
        if (rawType != String.class) {
            return null;
        }
        return (TypeAdapter) new StringNullAdapter();
    }
}

// StringNullAdapter代码

public class StringNullAdapter extends TypeAdapter {
    @Override
    public String read(JsonReader reader) throws IOException {
        // TODO Auto-generated method stub
        if (reader.peek() == JsonToken.NULL) {
            reader.nextNull();
            return "";
        }
        return reader.nextString();
    }
    @Override
    public void write(JsonWriter writer, String value) throws IOException {
        // TODO Auto-generated method stub
        if (value == null) {
            writer.nullValue();
            return;
        }
        writer.value(value);
    }
}

你可能感兴趣的:(android-软件)