Map转json是如何保证顺序以及Gson的单例化

在使用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;
    }
}



     

你可能感兴趣的:(java,rest,json)