map,对象,List转Json的方法---Gson处理Null的方法

踩过很多坑。试过好多方法,map,对象,转json往往会遇到很多问题,最常见的问题,莫过于出现了Object is null这个问题


查了好多资料。也试过很多方法。主流解决办法三种:

第一种:循环遍历对象中的数据,if判断null就赋值“”,这种方法一般的对象还可以,可是我们的项目对象基本都是二十几个,这样弄起来很费劲,因此放弃。

第二种:遇到null就不输出,只保留存在的。

Gson进行转化

  1. System.out.println( "----------gson(对null字段转换)---------");
  2. Gson gsonSerializeNull = new GsonBuilder().serializeNulls().create();
  3. System.out.println(gsonSerializeNull.toJson(s));

但是这种方式,遇到null的情况就会不输出这个null的key喝value

第三种,我们需要null就替换成“”

Gson是google的产品,性能个人觉得也是较为快速的。有一个缺点就是无法设置null替换,因此对于个人来说还是需要改造一下的,查了很多资料,最后在https://stackoverflow.com/questions/9483348/gson-treat-null-as-empty-string/24252578#24252578

找到了相关方法,具体方法就是自己创建一个UntilTool类,在其他的类中直接引用就可以了。


具体代码详见代码。其他的只需要引用就可以了。

package com.tecnova.utils;

import java.io.IOException;

import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;

public class JsonStringNull{
	

	public static 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 StringAdapter();
	    }
	}

	public static class StringAdapter extends TypeAdapter<String> {
	    public String read(JsonReader reader) throws IOException {
	        if (reader.peek() == JsonToken.NULL) {
	            reader.nextNull();
	            return "";
	        }
	        return reader.nextString();
	    }
	    public void write(JsonWriter writer, String value) throws IOException {
	        if (value == null) {
	            writer.nullValue();
	            return;
	        }
	        writer.value(value);
	    }
	}
}

以下是例子:


原本输出对象,但是前台说让转成json,但是直接用json转null的对象会报错。

因此需要进行改造


city等原本是null的就变成了“”

具体使用方式:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值