json-gson 解析泛型及解析null

参考://public static class paraJson {public   class paraJson{    static Gson gson  = new GsonBuilder().registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();

//    static Gson gson = new Gson();    //解析 Json对象    public static <T> T parseJson(Class<T> type,String jsonStr)throws Exception{//      Gson gson  = new GsonBuilder().registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();        return gson.fromJson(jsonStr,type);    }    // 将Json数组解析成相应的映射对象列表    public static <T> ArrayList<T> parseJsonArray(Class<T> myClass, String jsonStr)throws Exception{        Type type = new ListParameterizedType(myClass);        return gson.fromJson(jsonStr, type);    }

private static class ListParameterizedType implements ParameterizedType {        private Type type;        private ListParameterizedType(Type type) {            this.type = type;        }        @Override        public Type[] getActualTypeArguments() {            return new Type[] {type};        }        @Override        public Type getRawType() {            return ArrayList.class;        }        @Override        public Type getOwnerType() {            return null;        }        // implement equals method too! (as per javadoc)    }

/**     * @return 不区分类型 传什么解析什么     */    public static <T> T toObj(String jsonStr, Type type) {        return gson.fromJson(jsonStr, type);    }}

--------------------------------------------------

json解析有很多工具,这里说的是最常用也是解析速度最快的Gson,Gson是google家出的,有一个缺点就是无法设置null替换,
我们只能手动的批量替换服务器返回的null了,正常的接口定义的时候是绝对不允许服务器返回null的,后台结果却总会出现null!
如果搜索的话有一个常见的答案,
Gson gson = new GsonBuilder().serializeNulls().create();
但是这个却无法解决反序列问题,怎么解决呢?我在stackoverflow上找到了这个问题,亲测有效
http://stackoverflow.com/questions/9483348/gson-treat-null-as-empty-string/24252578#24252578

解决办法如下:

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

//NullStringToEmptyAdapterFactory的代码

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

// StringNullAdapter代码

public class StringNullAdapter extends TypeAdapter<String> {
    @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);
    }
}
-------------------------------------------------参考  http://blog.csdn.net/gl_mine_csdn/article/details/59652313http://blog.csdn.net/a332324956/article/details/50792120
时间: 2024-08-24 13:32:58

json-gson 解析泛型及解析null的相关文章

使用GSON和泛型解析约定格式的JSON串(转)

时间紧张,先记一笔,后续优化与完善. 解决的问题: 使用GSON和泛型解析约定格式的JSON串. 背景介绍: 1.使用GSON来进行JSON串与java代码的互相转换. 2.JSON的格式如下三种: 写道 #第一种: {"success":true,"data":{"averageStarLevel":4.7,"remarkCount":10}} #第二种: {"success":true,"da

Json,Gson,FastJson解析笔记

Json 1.将JavaBean转换成Json对象: [java]  view plain  copy public static String CreatJsonFromObject(Object key,Object value) { JSONObject JObj =new JSONObject(); JObj.put(key, value); return JObj.toString(); } 2.解析Json: [html]  view plain  copy public stati

Reflection和Expression Tree解析泛型集合快速定制特殊格式的Json

很多项目都会用到Json,而且大部分的Json都是格式固定,功能强大,转换简单等,标准的key,value集合字符串:直接JsonConvert.SerializeObject(List<T>)就可以搞定了,但凡事并非千篇一律,比如有的时候我们需要的Json可能只需要value,不需要key,并且前后可能还需要辅助信息等等,那该怎么办呢?我所能想到的可能有两种方案,1.自定义跟所需json格式一样的数据结构model,然后用JsonConvert.SerializeObject(model)直

Android开发:JSON简介及最全面解析方法(Gson、AS自带org.json、Jackson解析)

前言 今天,我们来介绍现今主流的数据交换格式-JSON! 同样作为主流为数据交换格式-XML,如果有兴趣可以阅读我写的XML及其DOM.SAX.PULL解析方法和对比 目录 JSON简介&解析方法介绍.png 定义 JavaScript Object Notation,JavaScript的对象表示法,是一种轻量级的文本数据交换格式. 作用 用于数据的标记.存储和传输. 特点 轻量级的文本数据交换格式 独立于语言和平台 具有自我描述性 读写速度快,解析简单 语法 JSON值 名称/值 数组 对象

json,xml,Html解析

1.json解析 javabean文件 1 public class TopNewsDetails { 2 public String retcode; 3 public Data data; 4 5 public class Data{ 6 public String title; 7 public String more; 8 public ArrayList<News> news ; 9 public ArrayList<TopNews> topnews ; 10 @Over

从fastjson多层泛型嵌套解析,看jdk泛型推断

给你一组json数据结构,你把它解析出来到项目中,你会怎么做? // data1 sample { "code" : "1", "msg" : "Success", "data" : { "userid1" : { "name" : "Zhangsan", "sex" : "male" } } } // da

android下基本json串的生成与解析

以前就用过json串,不过是在java环境下面,如今转移到android环境下,java里面生成解析json串的jar包与android中自带的冲突,所以也只能用安卓自带的. 先前查网上的资料,感觉很多都说的很乱,直接给出了例子,也不解释一下就算完成,他们自己肯定是明白的,但是让读者理解起来肯定有点难度.而且解析的方法很多,而这里,我就介绍一种最原始最简单的吧.希望我拙劣的表达能力不会影响到你们的理解. 首先我们先讲一下json串格式 比如对象pet(宠物) class pet{ int pet

【幻化万千戏红尘】qianfengDay29-Json解析、Gson解析、FASTJSON解析基础学习:

课程回顾: XML:可扩展的标记语言跨平台.跨网络.跨编程语言描述数据作用:1.传输数据2.配置文件3.Android的布局文件 解析XML:1.SAX2.PULL 创建类 今日内容:JSON:JavaScript Object Notation就是符合一定格式的字符串是轻量级,数据交互的格式目前互联网中使用范围最为广泛的数据交互的格式跨平台.跨网络.跨编程语言JSON的规则:{}---->对象,内部只能是属性组成[]---->数组,内部只能是元素组成""---->属

中国天气网 JSON接口的城市编码解析及结果

最近在弄一个Android应用,其中一个功能是天气情况展示,准备使用google的天气API服务(http://www.google.com/ig/api?hl=zh-cn&weather=,,,, ),不想这个接口已经在几个月前关闭服务了.于是各种资料,最终决定使用 中国天气网 的服务. 中国天气网提供有两种数据格式的接口: 一. XML接口 http://flash.weather.com.cn/wmaps/xml/china.xml http://flash.weather.com.cn/