在使用Redis缓存排序好的列表数据时,想在取数据的时候可以取列表中的某一项,于是决定使用Map来存放,并序列化这个Map. 由于Map本身是没有顺序的约束的。于是决定使用LinkedHashMap来确保key/value存放的顺序。
但如何将这个LinkedHashMap实例按照LinedHashMap的类型转成Json呢,笔者使用fastjson时,发现其不支持这种情况。经过各种尝试和查询资料,最终使用Gson来进行Java对象和Json String的转换。
gson.fromJson(jsonStr, LinkedHashMap.class);
String json = gson.toJson(jsonObject, LinkedHashMap.class);
调用Gson对象进行转换的地方比较多,如果在调用的地方每次new Gson的话,是比较影响性能的。而Gson本身是线程安全的,即Gson的对象可以被多个线程同时使用,于是在代码中单例化Gson对象势在必行。
笔者倾向于使用如下单例模式来提供该功能
public class GsonUtil
{
private static class GsonHolder{
private static final Gson INSTANCE = new Gson();
}
/**
* 获取Gson实例,由于Gson是线程安全的,这里共同使用同一个Gson实例
*/
public static Gson getGsonInstance()
{
return GsonHolder.INSTANCE;
}
}